2012-01-04 2 views
1

두 가지 사용자 동작 편집 방법이 있습니다. 첫 번째 확인란은 정확하게 IsAdmin 속성으로 채 웁니다.MVC3 뷰의 부울 모델 속성에서 체크 박스를 다시 채우는 방법

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

두 번째 방법은 로그인 한 사용자가 (확인란을 선택하지 않은) 자신의 관리자 privs 및 삭제하기 위해 노력하고 있는지 확인 true로 다시 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) 
     { 
      //... 
     } 
    } 

편집 사용자보기 그렇지 않으면 CheckBoxFor 도우미는 하나 대신 modelstate에서 값을 사용합니다,이

<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에서 값을 제거처럼 보인다 보기 모델의 경우 :

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

관련 문제