C# 如何从MVC3视图中的布尔模型属性重新填充复选框

C# 如何从MVC3视图中的布尔模型属性重新填充复选框,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有两种编辑用户操作方法。第一个选项使用IsAdmin属性正确填充复选框 public ActionResult Edit(string username) { var user = Membership.GetUser(username); var model = Map(user); return View(model); } 第二种方法应检查登录用户是否尝试删除自己的管理员权限(未选中复选框),并通过将model.IsAdmin属性设置回true来重新填充复选框。

我有两种编辑用户操作方法。第一个选项使用
IsAdmin
属性正确填充复选框

public ActionResult Edit(string username)
{
    var user = Membership.GetUser(username);
    var model = Map(user);
    return View(model);
}
第二种方法应检查登录用户是否尝试删除自己的管理员权限(未选中复选框),并通过将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>
}

@使用(Html.BeginForm())
{
@LabelFor(u=>u.UserName)
@Html.TextBoxFor(u=>u.UserName)
@LabelFor(u=>u.IsAdmin)
@CheckBoxFor(u=>u.IsAdmin)

@ActionLink(“取消”、“索引”) }

在尝试修改modelstate之前,请先删除modelstate中的值,否则,帮助程序的复选框将使用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);
}

在尝试修改之前,请从modelstate中删除该值,否则,帮助程序的复选框将使用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);
}