从列表中创建和绑定剃须刀复选框

时间:2018-04-17 06:33:09

标签: c# razor checkbox

自从我编写剃刀以来已经有一段时间了,我一直坚持从列表中创建checkboxfor选项并使其工作。我尝试了其他一些答案,但到目前为止还没有解决这个问题。

这是我在视图中使用的模型。我正在尝试为角色创建复选框。

public class AccountRegisterModel
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string emailAddresses { get; set; }
        public string password { get; set; }
        public string passwordConfirm { get; set; }
        public bool? isactive { get; set; }
        public string phone { get; set; }
        public string subscriptionKey { get; set; }
        public string SalesPersonReference { get; set; }
        public int ProjectId { get; set; }
        public int SalesPersonId { get; set; }
        public int? SalesRegionId { get; set; }

        public List<SelectListModel> Roles { get; set; }

        public List<SelectListModel> Projects { get; set; }
        public List<SelectListModel> SalesRegions { get; set; }
        public int TenantID { get; set; }
        public Guid TenantGuid { get; set; }
        public string UserID { get; set; }
        public string UserEmail { get; set; }
    }

角色类型SelectListModel

public class SelectListModel
    {
        public string Key { get; set; }
        public string Value { get; set; }
        public bool Selected { get; set; }
        public string ProjectHierarchyCode { get; set; }
        public string SalesRegionReference { get; set; }
        public int? Depth { get; set; }
        public bool isSelected { get; set; }
    }

我尝试创建复选框的方式

@foreach (var item in Model.Roles)
{
  @Html.CheckBoxFor(m=> item.isSelected, new { value = item.Value, id= "chkRole_"+item.Value})
}

模型“角色”列表在控制器中填充,我在页面上获得9个未命名的复选框。命名它们可以用标签解决,所以这不是问题。

问题是,当我检查一些框并点击“保存”时,所选角色不会被发布到控制器。模型参数中的角色字段为null。所以我认为我有一个具有约束力的问题。

2 个答案:

答案 0 :(得分:1)

尝试使用For Loop。我认为Razor HTML呈现效果不佳。

以下是您可以尝试的内容:

for (int i = 0; i < Model.Roles.Count(); i++)
    {
        @Html.CheckBoxFor(m => Model.Roles[i].isSelected, new { value = Model.Roles[i].Value })
    }

答案 1 :(得分:1)

       @for (int i = 0; i < Model.CampusTestResultModelList.Count; i++)
                    {
                        <tr>
                            <td> 
                              @Html.CheckBoxFor(modelItem=>Model.CampusTestResultModelList[i].RollNumber);

                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => Model.CampusTestResultModelList[i].StudentName)
                            </td>
                            <td>
                              @Html.TextBoxFor(modelItem => Model.CampusTestResultModelList[i].ObtainedMarks, new { @type = "number", min=0, step =1 ,
                             @class = "numeric-class form-control"})


                              @Html.HiddenFor(modelItem => Model.CampusTestResultModelList[i].TotalMarks)
                            </td>
                        </tr>
                    }

以下是我如何完成的示例,在您的情况下,这样的内容是相同的