我有一个包含10-25个字符串的动态列表,并希望在ASP.NET MVC应用程序中将它们显示为复选框。最简单的方法是什么?我是否必须创建一个将布尔与字符串配对的ViewModel结构列表?在表单发布后,我想提交已检查的值并在服务器端再次将它们解析为字符串列表。
谢谢!
答案 0 :(得分:4)
我是否必须创建一个将布尔与字符串配对的ViewModel结构列表?
这确实是最好的方式,我建议你:
型号:
public class MyViewModel
{
public string Label { get; set; }
public bool IsSelected { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
// Normally that comes from a respotiroy or something
var model = Enumerable.Range(1, 25).Select(x => new MyViewModel
{
Label = "item " + x
});
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> model)
{
// TODO: process your model. It will contain a list of all items
// along with their selected values
return View(model);
}
}
查看(~/Views/Home/Index.cshtml
):
@model IEnumerable<MyViewModel>
@using (Html.BeginForm())
{
<table>
<thead>
<tr>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<input type="submit" value="OK" />
}
最后是为模型的每个元素(~/Views/Home/EditorTemplates/MyViewModel.cshtml
)呈现的编辑器模板:
@model MyViewModel
<tr>
<td>
@Html.LabelFor(x => x.IsSelected, Model.Label)
@Html.HiddenFor(x => x.Label)
</td>
<td>
@Html.CheckBoxFor(x => x.IsSelected)
</td>
</tr>
答案 1 :(得分:2)
如果您想获取复选框的值,并且您想要一个强类型视图,那么是。您需要一个具有IEnumerable<ViewModel>
的viewmodel,其中ViewModel具有布尔值和字符串配对。
只需确保使用DisplayForModel渲染模型,否则您将无法获得内置集合处理。
编辑: 像往常一样,达林的答案比我的要完整得多。 ;)