title: How can I bind checkboxes to a viewmodel in mvc3
body: <p>I'm really struggling to wrap my head around this:</p>
  
  <p>I have a UserModel and a UserRoleModel:</p>
  
  <pre><code>    public class UserModel
  {
      [Required]
      [Display(Name = "User name")]
      public string UserName { get; set; }
  
      [Required]
      [DataType(DataType.EmailAddress)]
      [Display(Name = "Email address")]
      public string Email { get; set; }
  
      [Required]
      [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
      [DataType(DataType.Password)]
      [Display(Name = "Password")]
      public string Password { get; set; }
  
      [DataType(DataType.Password)]
      [Display(Name = "Confirm password")]
      [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
      public string ConfirmPassword { get; set; }
  
      public IEnumerable&lt;string&gt; UserRoles { get; set; }
  }
  public class UserRoleModel
  {
      public IEnumerable&lt;string&gt; AllRoles { get; set; }
      public UserModel user { get; set; }
  
      public UserRoleModel()
      {
          this.AllRoles = Roles.GetAllRoles();
          this.user = new UserModel();
      }
  }
  </code></pre>
  
  <p>In the controller:</p>
  
  <pre><code>        public ActionResult Create()
      {
          return View(new UserRoleModel());
      }
  
      [HttpPost]
      public ActionResult Create(UserRoleModel model)
      {
          if (ModelState.IsValid)
          {
              MembershipCreateStatus createStatus;
              Membership.CreateUser(model.user.UserName, model.user.Password, model.user.Email, null, null, true, null, out createStatus);
  
              if (createStatus == MembershipCreateStatus.Success)
              {
                  foreach (var r in model.AllRoles)
                  {
                      Roles.AddUserToRole(model.user.UserName, r);
                  }
  
                  return RedirectToAction("Index", "Home");
              }
              else
              {
                  ModelState.AddModelError("", ErrorCodeToString(createStatus));
              }
          }
  
          return View(model);
      }
  </code></pre>
  
  <p>And the view:</p>
  
  <pre><code>@model BBmvc.Areas.Tools.Models.UserRoleModel
  </code></pre>
  
  <p>and:</p>
  
  <pre><code>@using (Html.BeginForm()) {
  @Html.ValidationSummary(true)
  &lt;fieldset&gt;
      &lt;legend&gt;UserModel&lt;/legend&gt;
  
      &lt;div class="editor-label"&gt;
          @Html.LabelFor(model =&gt; model.user.UserName)
      &lt;/div&gt;
      &lt;div class="editor-field"&gt;
          @Html.EditorFor(model =&gt; model.user.UserName)
          @Html.ValidationMessageFor(model =&gt; model.user.UserName)
      &lt;/div&gt;
  
      &lt;div class="editor-label"&gt;
          @Html.LabelFor(model =&gt; model.user.Email)
      &lt;/div&gt;
      &lt;div class="editor-field"&gt;
          @Html.EditorFor(model =&gt; model.user.Email)
          @Html.ValidationMessageFor(model =&gt; model.user.Email)
      &lt;/div&gt;
  
      &lt;div class="editor-label"&gt;
          @Html.LabelFor(model =&gt; model.user.Password)
      &lt;/div&gt;
      &lt;div class="editor-field"&gt;
          @Html.EditorFor(model =&gt; model.user.Password)
          @Html.ValidationMessageFor(model =&gt; model.user.Password)
      &lt;/div&gt;
  
      &lt;div class="editor-label"&gt;
          @Html.LabelFor(model =&gt; model.user.ConfirmPassword)
      &lt;/div&gt;
      &lt;div class="editor-field"&gt;
          @Html.EditorFor(model =&gt; model.user.ConfirmPassword)
          @Html.ValidationMessageFor(model =&gt; model.user.ConfirmPassword)
      &lt;/div&gt;
      &lt;div class="editor-field"&gt;
          @foreach (var r in @Model.AllRoles)
          {
              @Html.CheckBox(r,false)
              @Html.Label(r)
              &lt;br /&gt;
          }
      &lt;/div&gt;
  
      &lt;p&gt;
          &lt;input type="submit" value="Create" /&gt;
      &lt;/p&gt;
  &lt;/fieldset&gt;
  </code></pre>
  
  <p>}</p>
  
  <p>First, I haven't been able to figure out how to use CheckBoxFor from my viewModel. But it does display the checkbox options, so I can live with it. But I am unable to figure out how to determine which checkboxes have been checked when the form is posted. I also seem to have broken the client side validation, I assume because I am using a viewModel.</p>