Asp.net mvc ASP.NETMVC5模型保留了父集合,但在Post中丢失了子集合

Asp.net mvc ASP.NETMVC5模型保留了父集合,但在Post中丢失了子集合,asp.net-mvc,razor,Asp.net Mvc,Razor,我有一个简单的父子模型 public class ApplicationTableAndFieldsViewModel { [Key] [Required] public int ParentTableID { get; set; } [Required] public string Description { get; set; } public List<ApplicationTableField> ApplicationT

我有一个简单的父子模型

   public class ApplicationTableAndFieldsViewModel
{
    [Key]
    [Required]
    public int ParentTableID { get; set; }
    [Required]
    public string Description { get; set; }

    public List<ApplicationTableField> ApplicationTableFields { get; set; }
}
public类applicationtable和fieldsviewmodel
{
[关键]
[必需]
public int ParentTableID{get;set;}
[必需]
公共字符串说明{get;set;}
公共列表ApplicationTableFields{get;set;}
}
我可以将整个模型从控制器传递到视图:

        public ViewResult Edit(int parentTableID)
    {
        ApplicationTableAndFieldsViewModel applicationTable = repository.ApplicationTablesVM
                .FirstOrDefault(p => p.ParentTableID == parentTableID);
        ViewBag.FieldTypeList = repository.FieldTypes;

        IEnumerable<string> FieldTypeDrop = repository.FieldTypes;


        List<SelectListItem> selectList = new List<SelectListItem>();
        foreach (var c in FieldTypeDrop)
        {
            SelectListItem i = new SelectListItem();
            i.Text = c;
            i.Value = c;
            selectList.Add(i);
        }
        ViewBag.FieldTypeList = selectList;
        return View(applicationTable);
    }
公共视图结果编辑(int parentTableID) { ApplicationTableAndFieldsViewModel applicationTable=repository.ApplicationTablesVM .FirstOrDefault(p=>p.ParentTableID==ParentTableID); ViewBag.FieldTypeList=repository.FieldTypes; IEnumerable FieldTypeDrop=repository.FieldTypes; List selectList=新建列表(); foreach(FieldTypeDrop中的变量c) { SelectListItem i=新建SelectListItem(); i、 Text=c; i、 数值=c; 选择列表。添加(i); } ViewBag.FieldTypeList=选择列表; 返回视图(可应用); } 在我看来,我在访问和循环访问这些孩子方面没有问题

         foreach (MASTS.Domain.ApplicationTableField f in Model.ApplicationTableFields)
         {
             <tr>
                <td colspan="7">@Html.EditorFor(model => f.Description)</td>
                <td colspan="3">@Html.DropDownListFor(model => f.FieldType, new SelectList(ViewBag.FieldTypeList, "Text", "Value"),f.FieldType)</td>
                <td colspan="2">@Html.CheckBoxFor(model => f.IsAudited)</td>
            </tr>
         }
foreach(Model.ApplicationTableFields中的MASTS.Domain.ApplicationTableField f)
{
@EditorFor(model=>f.Description)
@DropDownListFor(model=>f.FieldType,新选择列表(ViewBag.FieldTypeList,“Text”,“Value”),f.FieldType)
@Html.CheckBoxFor(model=>f.IsAudited)
}
但是,当我点击save按钮并返回到Edit Post时,父数据在那里,但子对象为null

有人能帮我理解为什么会这样或如何解决这个问题吗

谢谢


Ed

我曾经有过这个问题。它只是使用
for
,而不是
foreach

 @for (int i = 0; i < Model.ApplicationTableFields.Count(); i++)
 {
     @Html.EditorFor(model => Model.ApplicationTableFields[i].Description, new { htmlAttributes = new { @class = "form-control" } })
 }
for(int i=0;imodel.ApplicationTableFields[i]。描述,新的{htmlAttributes=new{@class=“form control”}) }
我曾经遇到过这个问题。它只是使用
for
,而不是
foreach

 @for (int i = 0; i < Model.ApplicationTableFields.Count(); i++)
 {
     @Html.EditorFor(model => Model.ApplicationTableFields[i].Description, new { htmlAttributes = new { @class = "form-control" } })
 }
for(int i=0;imodel.ApplicationTableFields[i]。描述,新的{htmlAttributes=new{@class=“form control”}) }
如果您能展示Post action,那就太好了。是否检查了每行控件中呈现的名称?如果显示Post操作,那将非常好。您是否检查了每行控件中呈现的名称?这部分不是我的问题。让孩子们回到海报上的模特儿身上。谢谢你,好的。但是你可以试试。正如我所说,有一次我在保存集合时遇到问题,我通过将foreach更改为for解决了这个问题。听起来是一样的,但事实并非如此。不管怎样,也许我不明白你的问题。好luck@ebick你说这部分不是我的问题是什么意思?当然是。您的
foreach
循环正在生成重复的
name
属性,这些属性与您的模型完全没有关系,因此将永远不会绑定到您的模型(另外,由于重复的
id
属性而生成无效的html)。必须使用
for
循环(或自定义
EditorTemplate
)。检查您当前生成的html,并将其与
for
循环生成的html进行比较,以了解您的错误。抱歉。当我第一次看到这个片段时,我认为Murilo是在解决编辑视图中循环遍历子对象的能力,因此我不认为它是解决我问题的一个解决方案。我会试试看。这绝对是解决办法。谢谢穆里洛,这部分不是我的问题。让孩子们回到海报上的模特儿身上。谢谢你,好的。但是你可以试试。正如我所说,有一次我在保存集合时遇到问题,我通过将foreach更改为for解决了这个问题。听起来是一样的,但事实并非如此。不管怎样,也许我不明白你的问题。好luck@ebick你说这部分不是我的问题是什么意思?当然是。您的
foreach
循环正在生成重复的
name
属性,这些属性与您的模型完全没有关系,因此将永远不会绑定到您的模型(另外,由于重复的
id
属性而生成无效的html)。必须使用
for
循环(或自定义
EditorTemplate
)。检查您当前生成的html,并将其与
for
循环生成的html进行比较,以了解您的错误。抱歉。当我第一次看到这个片段时,我认为Murilo是在解决编辑视图中循环遍历子对象的能力,因此我不认为它是解决我问题的一个解决方案。我会试试看。这绝对是解决办法。谢谢穆里洛。