我知道要在post之后获取模型,我们需要在剃刀视图中编写索引。我的模型有一个来自实体框架的实体,名为Class,但该实体具有en ICollection<Student>
属性导航。
我的意思是,我需要从Class实体中暴露我的项目,但问题是这个是ICollection而我不知道如何曝光索引。
这是我的剃刀观点:
@model Contoso.MvcApplication.Models.Assignment.ShareAssignmentViewModel
@{
ViewBag.Title = "ShareAssignment";
}
<h2>Share Assignment: @Model.Assignment.Name</h2>
@for (int i = 0; i < Model.Classes.Length; i++)
{
<section>
<h3>@Model.Classes[i].Name</h3>
@for (int j = 0; j < Model.Classes[i].Students.Count; j++)
{
@Html.CheckBox(modelItem => Model.Classes[i].Students // what now?? [j])
}
</section>
}
我可以做些什么来在发布后获得我的所有模型?
答案 0 :(得分:2)
@model Contoso.MvcApplication.Models.Assignment.ShareAssignmentViewModel
@{
ViewBag.Title = "ShareAssignment";
}
<h2>Share Assignment: @Model.Assignment.Name</h2>
@for (int i = 0; i < Model.Classes.Length; i++)
{
var studentsArray = Model.Classes[i].Students.ToArray();
<section>
<h3>@Model.Classes[i].Name</h3>
@for (int j = 0; j < studentsArray.Length; j++)
{
<input type="checkbox"
name="@(string.Format("Classes[{0}].Students[{1}]", i, j))"
value="@studentArray[j]" />
}
</section>
}
答案 1 :(得分:1)
你的意思是使用@ Html.CheckBoxFor而不是@Html.CheckBox吗?
在大多数情况下,@ Html.CheckBoxFor应该可以很好地渲染默认模型绑定器自动填充模型所需的标记。我没有用你的代码测试这个,因为我不太明白Model类中的内容。但是,如果@ Html.CheckBoxFor不起作用,您可以轻松使用自定义模型绑定器。关于此的一个教程是:
http://brendan.enrick.com/post/custom-model-binders-in-aspnet-mvc.aspx