在部分页面中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被接收为NULLpublic ActionResult UpdatePrivilege(IEnumerable<sample.Models.Privilege> updatedPrivilege
{
return PartialView("_Privilege", One_Track.Models.DataProvider.OneTrackDataProvider.GetPtrackPrivilegeNames());
}
为什么会发生这种情况?如有任何帮助,不胜感激
您至少需要将您发布的数据移动到您的表单中,否则什么都不会发布。
您还需要索引您的集合,以便模型绑定器能够工作。
这是通过使用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>
}