如何使用模型在控制器中选中复选框

时间:2015-01-26 16:43:46

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我正在尝试使用模型获取所选复选框的值,但无法按我的意愿获取;

下面是表格图片enter image description here

下面是我对此视图的代码

enter image description here

以下是结果的代码。我得到空值

enter image description here

以下是我的模型声明

public class RoleDetail
  {
    [Key]
    public int RoleDetailID { get; set; }

    public bool IsCreate { get; set; }
    public bool IsDelete { get; set; }
    public bool IsView { get; set; }
    public bool IsEdit { get; set; }
    public bool IsDownload { get; set; }
    public string ControllerName { get; set; }
    public System.DateTime CreateDate { get; set; }
    public Int32 UserTypeId { get; set; }
}
public enum ControllerName
{
    Account, Candidate, Career, ChooseUs, ContactUs, DocumentType, Employee, Gallery, GalleryType, GetTouch, Home, JobCategory, Jobs, Portfolio, ResumeUpload, RoleDetail, Services, User, UserRoleType

}

2 个答案:

答案 0 :(得分:2)

使用foreach替换视图中的for循环:

@for (var i = 0; i < lst.Count; i++)
{
    ...
    @Html.CheckBoxFor(x => lst[i].IsCreate)
    @Html.CheckBoxFor(x => lst[i].IsView)
    @Html.CheckBoxFor(x => lst[i].IsDelete)
    ...
}

为此,请确保您要迭代的变量是IList<T>T[]

此外,您的控制器操作参数应相应地命名:

public ActionResult Create(IEnumerable<RoleDetail> lst)
{
    ...
}

答案 1 :(得分:0)

您不应该在视图中创建RoleDetail。在GET方法中创建一个List<RoleDetail>,用你想要显示的对象填充它并将其返回到视图。

控制器

public ActionResult Create()
{
  List<RoleDetail> model = new List<RoleDetail>();
  // populate the collection, for example
  foreach(var name in Enum.GetNames(typeof(ControllerName)))
  {
    model.Add(new RoleDetail()
    {
      ControllerName = name,
      IsCreate = true // etc
    });
  }  
  return View(model);
}

public ActionResult Create(IEnumerable<RoleDetail> model)
{
}

查看

@model List<RoleDetail>
@using(Html.BeginForm())
{
  for(int i = 0; i < Model.Count; i++)
  {
    @Html.HiddenFor(m => m.ControllerName) // needed for postback
    @Html.DisplayFor( => m.ControllerName)
    @Html.CheckBoxFor(m => m.IsCreate)
    ....
  }
  <input type="submit" />
}

旁注

  1. 请勿尝试覆盖name(或value)属性。 HTML 帮助器为模型绑定正确设置这些(无论如何你 只是将它设置为帮助生成的值无论如何)
  2. foreach循环不起作用的原因是您的生成 重复的name属性(以及由于duplcate而导致的无效html id属性)。 for循环正确生成正确的 带有索引器的名称(例如<input name="[0].IsCreate " ..><input name="[1].IsCreate " ..>等。
  3. 您似乎不是为所有模型渲染控件 属性所以使用仅包含那些属性的视图模型 需要显示/编辑。 What is a view model in MVC
  4. 你有public enum ControllerName所以我怀疑属性 ControllerName中的RoleDetail应为public ControllerName ControllerName { get; set; }
  5. 将来发布代码,而不是它的图像!