Проверка модели со словарем - PullRequest
2 голосов
/ 19 июля 2010

Скажем, у меня есть такая модель:

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 еще выше и игнорирует то, что я туда положил

Приветствия, Амар

1 Ответ

1 голос
/ 19 июля 2010

Мне кажется, что вы делаете проверку более сложной, чем она должна быть. Вы взглянули на DataAnnotations, которые встроены в структуру? Блог Скотта Гу рассказывает об этом . Это действительно хороший (и простой) способ проверки моделей.

...