【发布时间】:2011-03-17 03:07:28
【问题描述】:
我的模型中有两个 Dictionary<string, byte> 属性,应该使用 0 到 5 个项目正确验证。例如属性skill (string dropDownListLabel, byte years)。
因为我需要支持非javascript客户端,所以我将所有5个输入对渲染到浏览器,只绑定现有的字典项,生活很棒。这为一个新的纯 HTML 表单提供了 5 个空输入对,每个输入对都有唯一的输入名称,这也是我想要的。
这是我使用的序列化(输入名称):
skill[0].Key = "", skill[0].Value = ""
... three more pairs ...
skill[4].Key = "", skill[4].Value = ""
但是在 POST 上,对于既没有指定 Key 也没有指定 Value 的 Key/Value 对,Value 上会出现 DefaultModelBinder 验证错误。
当 both 或 neither Key 和 Value 都被 POST 时,我是否可以使用类型和序列化在 DefaultModelBinder 中进行验证,因此 MVC 为我做的工作与可能,只有当它们有内容时才将它们添加到集合中?
谢谢, 香农
【问题讨论】:
-
我遵循了 Darin 在下面接受的答案的后半部分。我用空值预饱和 List
,其中 T 实现 IValidatable 以确保两者或都不提供任何值。此外,我在 T 上使用静态方法将 List 转换为相应的 IEnumerable 或从相应的 IEnumerable 转换,作为存储饱和/脱水过程的方便位置。最后,我还将唯一性比较放在那里,并从顶层模型上的 IValidatable 调用它。这也解决了 MVC 没有为字典项使用配置的 DataAnnotationValidation “Value Required”消息的问题。
标签: asp.net-mvc data-binding viewmodel