繁体   English   中英

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

[英]ASP.NET MVC CheckBoxList from model with List Property

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

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

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

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

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

 @for (var i = 0; i < Model.UserRoles.Count();i++ )
 {
   @Html.HiddenFor(model => 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)
{
    <span>
        <input type="checkbox" class="checkbox" name="selectedRoles" value="@info.RoleName" id="@infoRoleName" />
        <label for="@info.RoleName">@info.RoleName</label>
    </span>
}

行动

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

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

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

即将模型作为参数传递。

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

@model YourNameSpace.Model

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

视图

    List<eDurar.Models.tbl_ISOCetificate> 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)
    {       
        @:<div style="width: 30%;  display: inline-block; margin: 1em">
        @:<input type="checkbox" @item.chkd name="CheckedCertificates" value="@item.Cert_id">
        @:<label>@item.Cert_Name</label>
        @:</div> 
    }

调节器

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM