我想创建一个显示许多复选框列表以及一些其他字段的表单,其中这些列表的值和文本是在运行时确定的。
我遇到了一种情况,我可以更新模型的bool属性,但是一旦发布表单,其他属性就会被清空。
我敢肯定有一个简单的解决方案,但我似乎找不到。
public class MainModel
{
public List<CheckboxModel> Checkboxes { get; set;}
public MainModel()
{
this.Checkboxes = InitializeMethod(); // populates both description and selected for a bunch of boxes.
}
}
public class CheckboxModel
{
public String Description { get; set; } // This field is null when I get the model back in the HttpPost request
public bool Selected { get; set; }
}
主窗体视图
@model MainModel
@{
for(var i = 0; i < Model.Checkboxes.Count; i++)
{
@Html.EditorFor(m => m.Checkboxes[i]);
}
}
CheckboxModel编辑器视图
@model CheckboxModel
@Html.CheckBoxFor(m => m.Selected)
@Html.DisplayFor(m => m.Description)<br/>
您没有为该Description
属性生成表单控件,因此发布时表单数据中不会发送任何值。例如,您的模板应该是
@model CheckboxModel
@Html.CheckBoxFor(m => m.Selected)
@Html.DisplayFor(m => m.Description)
@Html.HiddenFor(m => m.Description)
或使用只读文本框显示说明
旁注:您的主要观点应该仅仅是
@Html.EditorFor(m => m.Checkboxes)
没有for
循环。该EditorFor()
方法接受IEnumerable<T>
并为您集合中的每个项目生成正确的html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句