2015-01-21 8 views
0

Я создал пользовательский 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, но проверка клиента не работает.

Что случилось с моим кодом?

ответ

2

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

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedRequiredAttribute), typeof(RequiredAttributeAdapter)); 
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalizedNumericRegularExpressionAttribute), typeof(RegularExpressionAttributeAdapter)); 
+0

Где вы находите LocalizedRequiredAttribute и LocalizedNumericRegularExpressionAttribute? –

+0

Они настроены на 'RegularExpressionAttribute' и' RequiredAttribute'. См. Вопрос внимательно –

0

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

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = ложь;