Asp.net-Mvc

MVC3 如何將多個複選框綁定到 ViewModel 中的 1 個屬性

  • March 2, 2015

我需要顯示一個複選框列表,可以檢查多個複選框。

當使用者點擊送出時,這些複選框的值需要進入 ViewModel 中的一個屬性……這是我到目前為止得到的……

public class RegisterModel
{
   public List<string> Roles { get; set; }
   public List<RoleModel> SelectedRoles { get; set; }    
}
public class RoleModel
{
   public string RoleName { get; set; }
}

在我看來,我正在嘗試這樣做……

@foreach (var role in Model.Roles)
{
   @Html.CheckBoxFor(m => m.SelectedRoles, role.RoleName)@role.RoleName
}

我收到以下錯誤:

CS0029: Cannot implicitly convert type 'System.Collections.Generic.List<string>' to 'bool'

有人可以告訴我我做錯了什麼嗎?

簡單:調整您的視圖模型以匹配您的視圖要求(即顯示某些角色的複選框列表),使用編輯器模板並避免在視圖中編寫循環。

所以:

查看型號:

public class RegisterModel
{
   public List<RoleModel> Roles { get; set; }
}

public class RoleModel
{
   public string RoleName { get; set; }
   public bool Selected { get; set; }
}

控制器:

public class HomeController : Controller
{
   public ActionResult Index()
   {
       var model = new RegisterModel
       {
           Roles = new[]
           {
               new RoleModel { RoleName = "administrator" },
               new RoleModel { RoleName = "developer" },
               new RoleModel { RoleName = "janitor :-)" },
           }.ToList()
       };
       return View(model);
   }

   [HttpPost]
   public ActionResult Index(RegisterModel model)
   {
       // at this stage the model will contain all the 
       // information you need
       return View(model);
   }
}

查看 ( ~/Views/Home/Index.cshtml):

@model RegisterModel

@using (Html.BeginForm())
{
   @Html.EditorFor(x => x.Roles)
   <button type="submit">OK</button>
}

編輯器模板 ( ~/Views/Home/EditorTemplates/RoleModel.cshtml):

@model RoleModel

<div>
   @Html.HiddenFor(x => x.RoleName)
   @Html.CheckBoxFor(x => x.Selected)
   @Html.LabelFor(x => x.Selected, Model.RoleName)
</div>

引用自:https://stackoverflow.com/questions/7986991