Asp.net mvc - 查看控制器,列表<model>为null

时间:2016-10-19 18:30:52

标签: c# asp.net-mvc

我的模特:

public class AdminPageModel
{
    public int? JobID { get; set; }

    [DisplayName("Description")]
    public string Description { get; set; }

    [DisplayName("Weight")]
    public decimal Weight { get; set; }

    public int ID { get; set; }        
}

表格1:

using (Html.BeginForm("EditTemplate", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
    for (var i = 0; i < Model.Count; i++)
    {
        <div class="form-group">
        @if (Model[i].JobID != null)
        {
            @Html.LabelFor(m => m[i].Description)
            @Html.TextBoxFor(m => m[i].Description)

            @Html.LabelFor(m => m[i].Weight)
            @Html.TextBoxFor(m => m[i].Weight)

            @Html.HiddenFor(m => m[i].ID)
            @Html.HiddenFor(m => m[i].JobID)
            <br />@Html.ActionLink("Delete", "DeleteTemplate", new { id = @Model[i].ID, jobID = selectedJobID })
        }

        </div>
    }
    <input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}

表格2:

using (Html.BeginForm("EditCompetency", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
    for (var i = 0; i < Model.Count; i++)
    {
        <div class="form-group">
            @if (Model[i].JobID == null)
            {
                @Html.LabelFor(m => m[i].Description)
                @Html.TextBoxFor(m => m[i].Description)

                @Html.LabelFor(m => m[i].Weight)
                @Html.TextBoxFor(m => m[i].Weight)

                @Html.HiddenFor(m => m[i].ID)
                @Html.HiddenFor(m => m[i].JobID)
                <br />@Html.ActionLink("Delete", "DeleteCompentency", new { id = @Model[i].ID})
            }

        </div>
    }
    <input type="submit" value="Update" class="btn btn-success" id="editSubmit" />

}

控制器:

[HttpPost]
public ActionResult EditCompetency(List<AdminPageModel> modelList)
{
    // stuff
}

[HttpPost]
public ActionResult EditTemplate(List<AdminPageModel> modelList)
{
    // stuff
}

这是问题所在。我有模板和能力。我可以整天添加/删除。尝试编辑时遇到问题。

模板没有任何问题,只有能力。如果我添加一个能力并且不存在任何模板,则编辑工作正常。但是,如果在我尝试编辑能力时存在模板,则List<AdminPageModel> modelList(我的视图强类型的类型)将显示为null。如果我删除模板,我可以根据自己的心灵内容编辑能力。今天早上我花了一大块时间在这上面转动。

1 个答案:

答案 0 :(得分:0)

以下是如何将您的能力数据和模板数据合并到一个视图模型中的示例,以便您不会有重叠的控件名称。

<强> ConfigController.cs

[HttpGet]
public ActionResult Index()
{
    AdminViewModel viewModel = // Get Data Somehow
    return View(viewModel);
}

[HttpPost]
public ActionResult EditCompetency(AdminViewModel viewModel)
{
    // access competency data with viewModel.Competencies
}

[HttpPost]
public ActionResult EditTemplate(AdminViewModel viewModel)
{
    // access template data with viewModel.Templates
}

AdminViewModel.cs 新班级

public class AdminViewModel
{
    public List<AdminPageModel> Templates { get; set; }
    public List<AdminPageModel> Competencies { get; set; }
}

<强> AdminPage.cshtml

@model AdminViewModel

using (Html.BeginForm("EditTemplate", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
    for (var i = 0; i < Model.Templates.Count; i++)
    {
        <div class="form-group">
        @if (Model.Templates[i].JobID != null)
        {
            @Html.LabelFor(m => m.Templates[i].Description)
            @Html.TextBoxFor(m => m.Templates[i].Description)

            @Html.LabelFor(m => m.Templates[i].Weight)
            @Html.TextBoxFor(m => m.Templates[i].Weight)

            @Html.HiddenFor(m => m.Templates[i].ID)
            @Html.HiddenFor(m => m.Templates[i].JobID)
            <br />@Html.ActionLink("Delete", "DeleteTemplate", new { id = @Model.Templates[i].ID, jobID = selectedJobID })
        }

        </div>
    }
    <input type="submit" value="Update" class="btn btn-success" id="editSubmit" />
}

using (Html.BeginForm("EditCompetency", "Config", FormMethod.Post, new { @class = "form-horizontal" }))
{
    for (var i = 0; i < Model.Competencies.Count; i++)
    {
        <div class="form-group">
            @if (Model.Competencies[i].JobID == null)
            {
                @Html.LabelFor(m => m.Competencies[i].Description)
                @Html.TextBoxFor(m => m.Competencies[i].Description)

                @Html.LabelFor(m => m.Competencies[i].Weight)
                @Html.TextBoxFor(m => m.Competencies[i].Weight)

                @Html.HiddenFor(m => m.Competencies[i].ID)
                @Html.HiddenFor(m => m.Competencies[i].JobID)
                <br />@Html.ActionLink("Delete", "DeleteCompentency", new { id = @Model.Competencies[i].ID})
            }

        </div>
    }
    <input type="submit" value="Update" class="btn btn-success" id="editSubmit" />

}
相关问题