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;i我曾经遇到过这个问题。它只是使用
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;i如果您能展示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是在解决编辑视图中循环遍历子对象的能力,因此我不认为它是解决我问题的一个解决方案。我会试试看。这绝对是解决办法。谢谢穆里洛。