我试图返回一个包含一个或多个子模型的模型,而这些子模型又可以包含一个子模型。第一层成功返回,但是,当我想返回第三层子模型时,我得到该模型的“默认”实例,而没有实际填充的变量。因此,返回的模型包含一个子模型,子模型包含另一个子模型,但最后一个子模型的值设置为'0'和'null'。
我正在使用Html.BeginItemCollection扩展方法,但我不确定我是否在第3层以正确的方式使用它们。如果有人请看看这个并帮助我?
主模型页面(第1层)
@using Website.Models
@model CreateAgendaBindingModel
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
{
<div class="form-horizontal">
for (int i = 1; i < 16; i++)
{
<div id='CreateVoedingDiv_@i'>
@Html.EditorFor(x => x.VoedingCollection[i], "CreateVoedingTemplate")
</div>
}
}
主要模型类(第1层)
public class CreateAgendaBindingModel
{
public int Id { get; set; }
public List<CreateVoedingBindingModel> VoedingCollection { get; set; }
}
子模型页面(第2层)
@using HtmlHelpers.BeginCollectionItem;
@using Website.Models
@model CreateVoedingBindingModel
@using (Html.BeginCollectionItem("VoedingCollection"))
{
<div class="form-group" id=@customVoedingId>
@Html.EditorFor(x => x.CustomVoeding[0], "CreateCustomVoedingTemplate")
</div>
}
子模型类(第2层)
public class CreateVoedingBindingModel
{
public int Id { get; set; }
public List<customvoeding> CustomVoeding { get; set; }
}
子模型页面的子模型(第3层)
@using HtmlHelpers.BeginCollectionItem;
@model FoodtrackerModel.customvoeding
@using (Html.BeginCollectionItem(ViewData.TemplateInfo.HtmlFieldPrefix + ".CustomVoeding"))
{
<div class="form-group">
@Html.Label("Opmerking (optioneel)", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.customVoedingOpmerking, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
}
子模型类的子模型是与实体框架集成的部分类。
子模型类的子模型(第3层)
public partial class customvoeding
{
public static List<customvoeding> GetAllCustomvoeding()
{
using (foodtrackerEntities1 db = new foodtrackerEntities1())
{
db.Configuration.LazyLoadingEnabled = false;
return db.customvoeding.ToList();
}
}
}
因此,为了澄清,返回第1层和第2层并填入所有变量。返回第3层但未填写任何变量。
答案 0 :(得分:0)
我通过不使用子模型的子模型解决了我的问题。我只是简单地将子模型字段的子模型硬编码为前一层的字段(因此第3层字段成为第2层字段)。恶心,但它解决了我的问题。老实说,我没有理解在快速时间范围内提供的解决方案,因为时间就是金钱,我继续说道。
失望,默认情况下MVC没有此功能。