如何使用在 运行 时生成的 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