Asp.net mvc 5 在调用“之前填充模型”;邮政「;方法

Asp.net mvc 5 在调用“之前填充模型”;邮政「;方法,asp.net-mvc-5,Asp.net Mvc 5,我有以下型号: public class ProjectMemberUserRolesViewModel { public List<ProjectMemberUserRolesElementViewModel> Elements { get; set; } } public class ProjectMemberUserRolesElementViewModel { public string AccessType { get; set; } public

我有以下型号:

public class ProjectMemberUserRolesViewModel
{
    public List<ProjectMemberUserRolesElementViewModel> Elements { get; set; }
}

public class ProjectMemberUserRolesElementViewModel
{
    public string AccessType { get; set; }
    public bool Delete { get; set; }
    public bool Create { get; set; }
    public bool Edit { get; set; }
    public bool Read { get; set; }
}
视图模型:

@model ProjectMemberUserRolesViewModel

@{
    ViewBag.Title = "UserRoles";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>UserRoles</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    foreach (var item in Model.Elements)
    {
        <div>
            @Html.DisplayFor(modelItem => item.AccessType)
        </div>
        <div>
            @Html.CheckBoxFor(modelItem => item.Delete) @Html.DisplayNameFor(modelItem => item.Delete)
            @Html.CheckBoxFor(modelItem => item.Create) @Html.DisplayNameFor(modelItem => item.Create)
            @Html.CheckBoxFor(modelItem => item.Edit) @Html.DisplayNameFor(modelItem => item.Edit)
            @Html.CheckBoxFor(modelItem => item.Read) @Html.DisplayNameFor(modelItem => item.Read)
        </div>
    }

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
}
问题是POST方法的ProjectMemberUserRolesViewModel模型参数为null。如果我查看页面源代码,就会发现foreach元素没有前缀:

<form action="/ProjectMember/UserRoles/1" method="post"><input name="__RequestVerificationToken" type="hidden" value="toGniflvXh6n56oubtdZZazRAAsCxGID9X9XoQaj8ItViXZiIx3ouYNbGZfi6QPdRQAU1tU8wRwdeojxs2dtpy-NlKZ1ClgxicV0nSSwHsIclXYA8FHYY6QDmku3Wd4ptIPaJ_amu9FmKV5TwI3Ijg2" /><input id="item_AccessType" name="item.AccessType" type="hidden" value="Child Projects" />        <div>
            Child Projects
        </div>
        <div>
            <input data-val="true" data-val-required="The Delete field is required." id="item_Delete" name="item.Delete" type="checkbox" value="true" /><input name="item.Delete" type="hidden" value="false" /> Delete
            <input data-val="true" data-val-required="The Create field is required." id="item_Create" name="item.Create" type="checkbox" value="true" /><input name="item.Create" type="hidden" value="false" /> Create
            <input data-val="true" data-val-required="The Edit field is required." id="item_Edit" name="item.Edit" type="checkbox" value="true" /><input name="item.Edit" type="hidden" value="false" /> Edit
            <input data-val="true" data-val-required="The Read field is required." id="item_Read" name="item.Read" type="checkbox" value="true" /><input name="item.Read" type="hidden" value="false" /> Read
        </div>
<input id="item_AccessType" name="item.AccessType" type="hidden" value="File Archive" />        <div>
            File Archive
        </div>
        <div>
            <input id="item_Delete" name="item.Delete" type="checkbox" value="true" /><input name="item.Delete" type="hidden" value="false" /> Delete
            <input id="item_Create" name="item.Create" type="checkbox" value="true" /><input name="item.Create" type="hidden" value="false" /> Create
            <input id="item_Edit" name="item.Edit" type="checkbox" value="true" /><input name="item.Edit" type="hidden" value="false" /> Edit
            <input id="item_Read" name="item.Read" type="checkbox" value="true" /><input name="item.Read" type="hidden" value="false" /> Read
        </div>
<input id="item_AccessType" name="item.AccessType" type="hidden" value="Project Member" />        <div>
            Project Member
        </div>
        <div>
            <input id="item_Delete" name="item.Delete" type="checkbox" value="true" /><input name="item.Delete" type="hidden" value="false" /> Delete
            <input id="item_Create" name="item.Create" type="checkbox" value="true" /><input name="item.Create" type="hidden" value="false" /> Create
            <input id="item_Edit" name="item.Edit" type="checkbox" value="true" /><input name="item.Edit" type="hidden" value="false" /> Edit
            <input id="item_Read" name="item.Read" type="checkbox" value="true" /><input name="item.Read" type="hidden" value="false" /> Read
        </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</form>

儿童项目
删去
创造
编辑
阅读
档案馆
删去
创造
编辑
阅读
项目成员
删去
创造
编辑
阅读
如何正确查看代码

如何正确查看代码

通过将
foreach
循环替换为
for

for (var i = 0; i < Model.Elements.Count; i++)
{
    <div>
        @Html.DisplayFor(x => x.Elements[i].AccessType)
    </div>
    <div>
        @Html.CheckBoxFor(x => x.Elements[i].Delete) 
        @Html.DisplayNameFor(x => x.Elements[i].Delete)

        @Html.CheckBoxFor(x => x.Elements[i].Create) 
        @Html.DisplayNameFor(x => x.Elements[i].Create)

        @Html.CheckBoxFor(x => x.Elements[i].Edit) 
        @Html.DisplayNameFor(x => x.Elements[i].Edit)

        @Html.CheckBoxFor(x => x.Elements[i].Read) 
        @Html.DisplayNameFor(x => x.Elements[i].Read)
    </div>
}
如何正确查看代码

通过将
foreach
循环替换为
for

for (var i = 0; i < Model.Elements.Count; i++)
{
    <div>
        @Html.DisplayFor(x => x.Elements[i].AccessType)
    </div>
    <div>
        @Html.CheckBoxFor(x => x.Elements[i].Delete) 
        @Html.DisplayNameFor(x => x.Elements[i].Delete)

        @Html.CheckBoxFor(x => x.Elements[i].Create) 
        @Html.DisplayNameFor(x => x.Elements[i].Create)

        @Html.CheckBoxFor(x => x.Elements[i].Edit) 
        @Html.DisplayNameFor(x => x.Elements[i].Edit)

        @Html.CheckBoxFor(x => x.Elements[i].Read) 
        @Html.DisplayNameFor(x => x.Elements[i].Read)
    </div>
}
for (var i = 0; i < Model.Elements.Count; i++)
{
    <div>
        @Html.DisplayFor(x => x.Elements[i].AccessType)
    </div>
    <div>
        @Html.CheckBoxFor(x => x.Elements[i].Delete) 
        @Html.DisplayNameFor(x => x.Elements[i].Delete)

        @Html.CheckBoxFor(x => x.Elements[i].Create) 
        @Html.DisplayNameFor(x => x.Elements[i].Create)

        @Html.CheckBoxFor(x => x.Elements[i].Edit) 
        @Html.DisplayNameFor(x => x.Elements[i].Edit)

        @Html.CheckBoxFor(x => x.Elements[i].Read) 
        @Html.DisplayNameFor(x => x.Elements[i].Read)
    </div>
}
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    @Html.EditorFor(x => x.Elements)

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
}
@model ProjectMemberUserRolesElementViewModel

<div>
    @Html.DisplayFor(x => x.AccessType)
</div>
<div>
    @Html.CheckBoxFor(x => x.Delete) 
    @Html.DisplayNameFor(x => x.Delete)

    @Html.CheckBoxFor(x => x.Create) 
    @Html.DisplayNameFor(x => x.Create)

    @Html.CheckBoxFor(x => x.Edit) 
    @Html.DisplayNameFor(x => x.Edit)

    @Html.CheckBoxFor(x => x.Read) 
    @Html.DisplayNameFor(x => x.Read)
</div>