Имена типов проверки в ненавязчивых правилах проверки клиентов должны быть уникальными. Следующий тип проверки встречался более одного раза: требуется

Я создал настраиваемую проверку модели ASP.Net MVC следующим образом:

internal class LocalizedRequiredAttribute : RequiredAttribute, IClientValidatable 
{
    public List<string> DependentProperties { get; private set; }
    public List<string> DependentValues { get; private set; }
    public string Props { get; private set; }
    public string Vals { get; private set; }
    public string RequiredFieldValue { get; private set; }

    public LocalizedRequiredAttribute(string resourceId = "")
    {
        if (string.IsNullOrEmpty(resourceId))
            ErrorMessage = ResourcesHelper.GetMessageFromResource("RequiredValidationErrorMessage");
        else
            ErrorMessage = ResourcesHelper.GetMessageFromResource(resourceId);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        string msg = FormatErrorMessage(metadata.GetDisplayName());
        yield return new ModelClientValidationRequiredRule(msg); //Exception
    }
}
internal class LocalizedNumericRegularExpressionAttribute : RegularExpressionAttribute, IClientValidatable 
{
    public LocalizedNumericRegularExpressionAttribute(string resourceId = "") : base(@"^\d+$")
    {
        if (string.IsNullOrEmpty(resourceId))
            ErrorMessage = ResourcesHelper.GetMessageFromResource("NumberRequiredValidationErrorMessage");
        else
            ErrorMessage = ResourcesHelper.GetMessageFromResource(resourceId);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        string msg = FormatErrorMessage(metadata.GetDisplayName());
        yield return new ModelClientValidationRequiredRule(msg); //Exception
    }
}

вот моя модель:

public class MyModel
{
   [LocalizedRequired]
   [LocalizedNumericRegularExpression]
   public int Emp_No { get; set; }
}

Всякий раз, когда я перехожу к форме с помощью вышеуказанной модели, возникает следующее исключение.

Validation type names in unobtrusive client validation rules must be unique. The following validation type was seen more than once: required

приведенные выше коды в порядке, если я удалю IClientValidatable, но проверка клиента не работает.

Что не так с моим кодом?


person Mohammad Dayyan    schedule 21.01.2015    source источник


Ответы (2)


Я нашел решение, мы должны добавить следующие коды в Application_Start в global.asax

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRequiredAttribute), typeof(RequiredAttributeAdapter));
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedNumericRegularExpressionAttribute), typeof(RegularExpressionAttributeAdapter));
person Mohammad Dayyan    schedule 21.01.2015
comment
Где найти атрибуты LocalizedRequiredAttribute и LocalizedNumericRegularExpressionAttribute? - person Sean Thorburn; 16.09.2016
comment
Они настроены из RegularExpressionAttribute и RequiredAttribute. Внимательно рассмотрите вопрос - person Mohammad Dayyan; 12.09.2017

Вы устанавливаете значение ValidationType таким же, как и автоматическая проверка MVC. Таким образом, вы должны изменить значение ValidationType = "name unique" в ModelClientValidationRule или его производном классе. Имя должно избегать автоматического создания имени MVC, такого как 'date', 'required' ... Другое решение - отключить автоматическую проверку, поместив этот код при запуске приложения.

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

person functravel.com    schedule 25.05.2017