如何使用在 运行 时生成的 descriptions/values 创建 MVC4 复选框列表
How to Create MVC4 checkbox list with descriptions/values generated at run time
我想创建一个显示多个复选框列表以及一些其他字段的表单,其中这些列表的值和文本是在 运行 时间确定的。
我 运行 遇到了这样一种情况,我可以更新模型的 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
属性 生成表单控件,因此当您 post 时,表单数据中没有发送任何值。例如,您的模板应该是
@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>
并为 collection
中的每个项目生成正确的 html
我想创建一个显示多个复选框列表以及一些其他字段的表单,其中这些列表的值和文本是在 运行 时间确定的。
我 运行 遇到了这样一种情况,我可以更新模型的 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
属性 生成表单控件,因此当您 post 时,表单数据中没有发送任何值。例如,您的模板应该是
@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>
并为 collection