說我有一個模型,如下所示:模型驗證與字典
public class MyViewModel {
//some properties
public string MyString {get;set;}
public Dictionary<string,string> CustomProperties {get;set;}
}
而且我提出的字典屬性,像這樣:
<%= Html.EditorFor(m => m.CustomProperties["someproperty"]) %>
一切工作正常,但我實現了自定義驗證器來驗證這個詞典的屬性,但是當返回ModelValidationResult
時,我無法獲得正確引用的成員名稱(我相信這應該是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!" };
}
}
}
看起來象是在MemberName
屬性填充進一步上漲,而忽略了我擺在那裏
乾杯, 阿馬爾
更新:我研究過這個問題,看起來modelState錯誤數據是由DefaultModelBinder創建的,它間接使用一個名爲ModelValidator.CompositeModelValidator的私有類。此私有類只調用CreateSubPropertyName,並沒有考慮潛在的索引器。明天某個時候我會發布解決方案。 – amarsuperstar 2010-07-19 21:08:08