我正在尝试使用模型获取所选复选框的值,但无法按我的意愿获取;
下面是表格图片
下面是我对此视图的代码
以下是结果的代码。我得到空值
以下是我的模型声明
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
}
答案 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" />
}
旁注
name
(或value
)属性。 HTML
帮助器为模型绑定正确设置这些(无论如何你
只是将它设置为帮助生成的值无论如何)foreach
循环不起作用的原因是您的生成
重复的name
属性(以及由于duplcate而导致的无效html
id
属性)。 for
循环正确生成正确的
带有索引器的名称(例如<input name="[0].IsCreate " ..>
,<input
name="[1].IsCreate " ..>
等。public enum ControllerName
所以我怀疑属性
ControllerName
中的RoleDetail
应为public ControllerName ControllerName { get; set; }
?将来发布代码,而不是它的图像!