Скажем, у меня есть такая модель:
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
еще выше и игнорирует то, что я туда положил
Приветствия, Амар