使用字典进行模型验证

时间:2010-07-19 17:22:47

标签: asp.net-mvc validation asp.net-mvc-2 modelbinders

说我有这样的模型:

public class MyViewModel {
  //some properties
  public string MyString {get;set;}
  public Dictionary<string,string> CustomProperties {get;set;}
}

我正在展示这样的字典属性:

<%= Html.EditorFor(m => m.CustomProperties["someproperty"]) %>

一切运行良好,但是我已经实现了一个自定义验证器来验证这个字典的属性,但是当返回ModelValidationResult时,我无法正确引用成员名称({1}}我相信)。列表中属性的所有项都正确绑定到它们的错误(我希望文本框中的错误类,所以我可以突出显示它。)

这是我到目前为止的自定义验证器的代码

CustomProperties[someproperty]

似乎某些东西正在填充public class CustomValidator : ModelValidator { public Custom(ModelMetadata metadata, ControllerContext controllerContext) : base(metadata, controllerContext) { } public override IEnumerable<ModelValidationResult> Validate(object container) { if (Metadata.PropertyName.Equals("mystring", StringComparison.OrdinalIgnoreCase)) { yield return new ModelValidationResult() {Message = "normal property validator works!!"}; } else if (Metadata.PropertyName.Equals("customproperties", StringComparison.OrdinalIgnoreCase)) { yield return new ModelValidationResult() { MemberName = "CustomProperties[someproperty]", Message = "nope!" }; } } } 属性,而忽略了我放在那里的东西

干杯, 阿玛尔

1 个答案:

答案 0 :(得分:1)

在我看来,您的验证比实际需要的更难。您是否看过构建在框架中的DataAnnotations? Scott Gu's blog talks about this。这是一种非常好(且简单)的模型验证方法。