如何在MVC3视图中从布尔模型属性重新填充复选框
本文关键字:新填充 填充 复选框 属性 模型 MVC3 视图 布尔 | 更新日期: 2023-09-27 18:19:37
我有两个Edit User Action方法。第一个使用IsAdmin
属性正确填充复选框。
public ActionResult Edit(string username)
{
var user = Membership.GetUser(username);
var model = Map(user);
return View(model);
}
第二种方法应该检查登录用户是否试图删除自己的管理员权限(取消选中复选框),并通过设置模型重新填充复选框。IsAdmin属性返回true。返回的模型已正确填充,但复选框未被选中。
[HttpPost]
public ActionResult Edit(UserModel model)
{
if (model.UserName == User.Identity.Name && model.IsAdmin == false)
{
ModelState.AddModelError("", "You cannot remove your own admin privileges");
model.IsAdmin = true;
return View(model);
}
if (ModelState.IsValid)
{
//...
}
}
编辑用户视图看起来像这个
<div class="simpleform">
@using (Html.BeginForm())
{
<fieldset>
<div>
@Html.LabelFor(u => u.UserName)</div>
<div>
@Html.TextBoxFor(u => u.UserName)</div>
<div>
@Html.LabelFor(u => u.IsAdmin)</div>
<div>
@Html.CheckBoxFor(u => u.IsAdmin)</div>
<br />
<div>
<input type="submit" value="Submit" />
@Html.ActionLink("Cancel", "Index")</div>
</fieldset>
}
在尝试修改之前从modelstate中删除该值,否则CheckBoxFor助手将使用modelstate中的值,而不是视图模型中的值:
if (model.UserName == User.Identity.Name && model.IsAdmin == false)
{
ModelState.AddModelError("", "You cannot remove your own admin privileges");
ModelState.Remove("IsAdmin");
model.IsAdmin = true;
return View(model);
}