如何使用在运行时生成的描述/值创建MVC4复选框列表

时间:2015-10-05 23:55:34

标签: c# asp.net-mvc-4 mvc-editor-templates asp.net-mvc-viewmodel

我想创建一个表单,其中显示了许多复选框列表以及其他一些字段,其中这些列表的值和文本是在运行时确定的。

我遇到过这种情况,我可以让模型的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/>

1 个答案:

答案 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