Bru*_*eis 5 asp.net-mvc modelbinders
我有一个包含Dictionary 的ViewModel类(以及此问题的其他不相关的东西):
public class MyViewModel {
public Dictionary<int, string> Data { get; set; }
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
然后我有几个GET/ POST动作处理字典.该GET操作将首先填充Dictionary<int, string>数据库中的一些数据,然后返回View:
.Key旨意是在隐藏字段 ; 和.Value旨意是在文字区域供用户编辑.然后,用户将提交此表单,并调用该POST操作.它将尝试处理输入(该过程无关紧要).一些Key/ Value对将是有效的,一些将是无效的.
如果存在无效对,则该POST操作将重建ViewModel,但这次该字典应仅包含无效对,并将重新显示相同的View以供用户修复并再次尝试提交.
问题:实现这一目标的最简单,最干净的方法是什么?
到目前为止(工作正常),在控制器中:
public ActionResult MyAction(MyViewModel vm) {
/* Process data */
if (are there invalid pairs?) {
var vmErrors = new MyViewModel();
/* ... fill the ViewModel ... */
vmErrors.Data =
vm.Data
.Where(x => IsInvalid(x))
.ToDictionary(x => x.Key, x => x.Value);
return View(vmErrors);
}
}
Run Code Online (Sandbox Code Playgroud)
并且观点:
<% var i = 0; foreach (var p in Model.Data) { %>
<%= Html.Hidden("vm.Data[" + i + "].key", vm.Key %>
<%= Html.TextArea("vm.Data[" + i + "].value", vm.Value %>
<% i++; } %>
Run Code Online (Sandbox Code Playgroud)
问题是,为了取悦模型绑定器,我必须使用顺序ID在视图上命名我的字段.但我还必须迭代字典以提取键/值对,因此它不能是for (var i = 0; i < Model.Data.Count; i++) {...}循环.
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |