具有List属性的模型中的ASP.NET MVC CheckBoxList

如果标题不清楚,请道歉。

我正在尝试从ASP.NET MVC中的表单提交返回我的模型。

我的问题几乎与这个问题相同,只是因为我没有List而是一个类似的模型:

 public Model { string UserName {get; set;} string Password {get; set;} List UserRoles {get; set;} } 

我需要UserRoles作为管理员在创建新用户时可以选择的复选框。 我的问题是,我不确定如何对列表使用’@ Html.CheckBoxFor’。 我试过这个:

  @for (var i = 0; i  model.UserRoles[i].RoleID) @Html.CheckBoxFor(model => model.UserRoles[i].Selected) @Html.LabelFor(model => model.UserRoles[i].Name) } 

这绝不起作用 – 页面上的每个标签都是“名称”,我的列表在POST中是空的。 任何人都可以给我任何指导吗?

根本不需要离开Razor。

这对我有用:

 for (var i = 0; i < Model.UserRoles.Count(); i++) { var role = Model.UserRoles[i]; @Html.HiddenFor(model => model.UserRoles[i].RoleId) @Html.CheckBoxFor(model => model.UserRoles[i].Selected) @Html.LabelFor(model=> model.UserRoles[i].Name, role.Name) } 

请参阅下面的代码,这样您就不需要隐藏角色ID,当您为用户保存所选角色时,也无需遍历所有角色以查看选择了哪个角色。

视图

 @foreach (Roles info in Model.UserRoles) {     } 

行动

 [HttpPost] public ActionResult CreateUsers(Model model, string[] selectedRoles) { // } 

从您在视图中的代码,post应该可以正常工作,提供您的post操作如下所示:

 [HttpPost] public ActionResult Action(Model model) { return View(model); } 

即将模型作为参数传递。

还要确保在视图中也有模型参考:

 @model YourNameSpace.Model 

将复选框列表发布到服务器并获取已检查项目的列表
linq左连接检查是否选中,生成复选框,收到检查清单

视图

  List ModList = db.tbl_ISOCetificate.ToList(); var li = (from cert in db.tbl_ISOCetificate join comCert in db.tbl_CompCertificate on cert.Cert_id equals comCert.CompCer_id into jo from b in jo.DefaultIfEmpty() select new {cert.Cert_id,cert.Cert_Name,chkd = b.CompCer_SerId==null?"":"checked"}).ToList(); foreach (var item in li) { @:
@: @: @:
}

调节器

  [HttpPost] public ActionResult ManageSurveyGroup(int[] CheckedCertificates) { return View(); }