2012-01-04 13 views
1

我有两个编辑用户操作方法。第一个选项用IsAdmin属性正确填充复选框。如何在MVC3视图中从布尔模型属性重新填充复选框

public ActionResult Edit(string username) 
{ 
    var user = Membership.GetUser(username); 
    var model = Map(user); 
    return View(model); 
} 

第二种方法应该检查是否登录用户试图删除自己的管理员PRIVS(未选中该复选框),并通过设置model.IsAdmin财产回真正的重新填充的复选框。返回的模型已正确填充,但复选框未被检查。

[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> 
} 

回答

1

试图修改之前卸下的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); 
} 
+0

完美。谢谢Darin。 – friedX 2012-01-05 09:57:06

相关问题