C# Asp.net mvc-查看控制器,列表<;模型>;是空的

C# Asp.net mvc-查看控制器,列表<;模型>;是空的,c#,asp.net-mvc,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;

我的模型:

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" />
}
使用(Html.BeginForm(“EditTemplate”、“Config”、FormMethod.Post、new{@class=“form horizontal”}))
{
对于(var i=0;im[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)

@Html.ActionLink(“删除”,“删除模板”,新建{id=@Model[i].id,jobID=selectedJobID}) } } }
表格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" />

}
使用(Html.BeginForm(“EditCompetency”,“Config”,FormMethod.Post,new{@class=“form horizontal”}))
{
对于(var i=0;im[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)

@Html.ActionLink(“删除”,“删除补偿”,新{id=@Model[i].id}) } } }
控制器:

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

[HttpPost]
public ActionResult EditTemplate(List<AdminPageModel> modelList)
{
    // stuff
}
[HttpPost]
公共行动结果编辑能力(列表模型列表)
{
//东西
}
[HttpPost]
公共操作结果编辑模板(列表模型列表)
{
//东西
}
问题就在这里。我有模板和能力。我可以全天添加/删除。尝试编辑时遇到问题


模板完全没有问题,只有能力。如果我添加了一个能力,但没有模板存在,那么编辑工作就可以了。但是,如果在我尝试编辑能力时存在模板,则
列表模型列表
(我的视图是强类型化的类型)将作为null输入。如果我删除模板,我可以编辑我的心内容的能力。今天早上我花了很多时间在这上面

下面是一个示例,说明如何将能力数据和模板数据组合到单个viewmodel中,以避免控件名称重叠

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(新类)

公共类AdminViewModel
{
公共列表模板{get;set;}
公共列表{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" />

}
@model AdminViewModel
使用(Html.BeginForm(“EditTemplate”、“Config”、FormMethod.Post、new{@class=“form horizontal”}))
{
对于(var i=0;im.Templates[i].Description)
@Html.TextBoxFor(m=>m.Templates[i].Description)
@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)

@Html.ActionLink(“删除”,“删除模板”,新建{id=@Model.Templates[i].id,jobID=selectedJobID}) } } } 使用(Html.BeginForm(“EditCompetency”、“Config”、FormMethod.Post、new{@class=“form horizontal”})) { 对于(变量i=0;im.Competencies[i].说明) @Html.TextBoxFor(m=>m.Competencies[i].说明) @LabelFor(m=>m.Competencies[i].Weight) @Html.TextBoxFor(m=>m.Competencies[i].Weight) @Html.HiddenFor(m=>m.Competencies[i].ID) @Html.HiddenFor(m=>m.capabilities[i].JobID)
@Html.ActionLink(“删除”,“删除补偿”,新{id=@Model.capabilities[i].id}) } } }
这两个表单是否在同一页上?如果它们是相同的,那么您将拥有具有相同名称和ID的控件,这可能会以几种不同的方式导致问题。它们确实位于同一页上。您可以尝试将它们放在不同的页上吗?或者,让页面的viewmodel包含两个列表:一个用于模板,另一个用于补充。然后将这两个列表绑定到适当的表单。现在基本上是将相同的数据绑定到两个表单。如果这对你来说没有意义,我可以在回答中写出一些代码。如果你不介意的话,举个例子会很有帮助。我刚刚为你添加了一个例子。如果有帮助,请告诉我。
@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" />

}