说我有这样的模型:
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!" };
}
}
}
属性,而忽略了我放在那里的东西
干杯, 阿玛尔
答案 0 :(得分:1)
在我看来,您的验证比实际需要的更难。您是否看过构建在框架中的DataAnnotations? Scott Gu's blog talks about this。这是一种非常好(且简单)的模型验证方法。