在部分页面中ajaxPost之后,控制器动作中的模型为空

本文关键字:模型 控制器 分页 ajaxPost 之后 | 更新日期: 2023-09-27 17:49:51

我是新的ASP mvc我有一个像

这样的局部页面
@model IEnumerable<Sample.Models.Privilege>
@{
    ViewBag.Title = "Details";
}
<script type="text/javascript">
    function UpdatePrivilegeSuccess() {
    }
    function UpdatePrivilegeFailure() {
    }
</script>
<div class="settingsTable" style="position: relative; width: 100%; margin: 0 auto">
    <div style="width: 50%; margin: 0 auto">
        <div style="width: 50%; margin: 0 auto">
            <h2>Privilege</h2>
        </div>
    </div>
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.PrivilegeName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.module.ModuleName)
            </th>
            <th>
                @Html.Label("Option")
            </th>
            <th>Action</th>
        </tr>
       @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.PrivilegeName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.module.ModuleName)
                </td>
                <td>
                    @Html.CheckBoxFor(modelItem => item.Checked)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.PrivilegeId }) |
                    @Html.ActionLink("Delete", "Delete", new { id = item.PrivilegeId })
                </td>
            </tr>
        }
    </table>
    @using (Ajax.BeginForm("UpdatePrivilege", "RolePrivilegemapping",
        new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "PrivilegeWrapper",
                          OnSuccess = "UpdatePrivilegeSuccess",
                          OnFailure = "UpdatePrivilegeFailure"
        }))
    {
         <p>
            <input type="submit" value="Update" />
        </p>
        @Html.ActionLink("Update", "UpdatePrivilege", "RolePrivilegemapping")
    }
</div>

我在一个表中列出特权。但是当用户点击Update更新模型后,在控制器动作

中model被接收为NULL
public ActionResult UpdatePrivilege(IEnumerable<sample.Models.Privilege> updatedPrivilege
{
    return PartialView("_Privilege", One_Track.Models.DataProvider.OneTrackDataProvider.GetPtrackPrivilegeNames());
}

为什么会发生这种情况?如有任何帮助,不胜感激

在部分页面中ajaxPost之后,控制器动作中的模型为空

您至少需要将您发布的数据移动到您的表单中,否则什么都不会发布。

您还需要索引您的集合,以便模型绑定器能够工作。

这是通过使用for而不是foreach来实现的。

如果您需要重新绑定不可编辑的字段,则必须将它们作为隐藏输入提供。您可以使用HiddenFor。请参阅下面的DisplayFor 's。

        @using (Ajax.BeginForm("UpdatePrivilege", "RolePrivilegemapping",
            new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "PrivilegeWrapper",
                              OnSuccess = "UpdatePrivilegeSuccess",
                              OnFailure = "UpdatePrivilegeFailure"
            }))
        {
       <table>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.PrivilegeName)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.module.ModuleName)
                </th>
                <th>
                    @Html.Label("Option")
                </th>
                <th>Action</th>
            </tr>
           @for(var i = 0; i < Model.Count; i++)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => modelItem[0].PrivilegeName)
@Html.HiddenFor(modelItem  => modelItem[0].PrivilegeName)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => Model[0].ModuleName)
                        @Html.HiddenFor(modelItem  => modelItem[0].ModuleName)
                    </td>
                    <td>
                        @Html.CheckBoxFor(modelItem => Model[0].Checked)
                    </td>
                    <td>
                        @Html.ActionLink("Edit", "Edit", new { id = item.PrivilegeId }) |
                        @Html.ActionLink("Delete", "Delete", new { id = item.PrivilegeId })
                    </td>
                </tr>
            }
        </table>
             <p>
                <input type="submit" value="Update" />
            </p>
        }