我想创建一个表单,其中显示了许多复选框列表以及其他一些字段,其中这些列表的值和文本是在运行时确定的。
我遇到过这种情况,我可以让模型的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/>
答案 0 :(得分:2)
您没有为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