MVC3 / EF CustomValidator два поля в модели - PullRequest
0 голосов
/ 31 августа 2011

Используя MVC3 и EF4.1, как проверить на клиенте и сервере более одного поля в моей модели представления?

У меня есть текстовое поле даты начала (которое можно изменить), и у меня есть исходная дата начала в скрытом поле. Когда пользователь отправляет форму, я хочу убедиться, что измененная начальная дата не превышает одного месяца по обе стороны от первоначальной начальной даты.

Я не могу понять, как это можно сделать с помощью DataAnnotation и CustomValidation (или, возможно, я иду по неправильному пути)? Вот пример того, с чем я работал:

[MetadataType(typeof(Metadata.MyUserMetaData))]
public partial class MyUser
{
    public System.DateTime DateOfBirth { get; set; }    
}

Частичный класс

public class MyUserMetaData
{
    [CustomValidation(typeof(AmendedStartDate), "amendedstartdate", ErrorMessage = "Invalid date."]
    public DateTime StartDate { get; set; };

    public DateTime OriginalStartDate { get; set; };
}

Пользовательский валидатор

public class AmendedStartDate : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        // How do I get multiple field values from object value?
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(Modelmetadata metadate, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
        ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "amendedstartdate"
        };

        yield return rule;
    }
}

Я знаю, что все еще добавляю jQuery в представление для этого валидатора.

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Вместо использования аннотаций данных внедрите IValidatableObject в свой класс модели - это проще и намного понятнее в сценариях с перекрестной проверкой.

Если вы все еще хотите использовать ValidationAttribute, у вас есть два параметра в методе IsValid:

  • value представляет проверенное значение свойства, которому назначен атрибут
  • context - это контекст, в котором свойство проверяется.Он также содержит свойства ObjectInstance и ObjectType для доступа ко всей модели и ее типу, так что вы можете привести экземпляр и получить доступ к другим свойствам.
0 голосов
/ 31 августа 2011

Вопрос, заданный в Пользовательская проверка MVC: сравните две даты содержит пример валидатора, который сравнивается со вторым значением в модели.Это должно начать вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...