Ошибка неконструктивной проверки клиента

#c# #asp.net-mvc #asp.net-mvc-3

#c# #asp.net-mvc #asp.net-mvc-3

Вопрос:

Я использую asp.net mvc 3 и я продолжаю получать следующую ошибку.

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

Я понятия не имею, поскольку у меня есть это

 @Html.TextBoxFor(x => x.Mark)
  

// my viewmodel

    [Required(ErrorMessage = "Message")]
        [Number(ErrorMessage = "Message")]
        public decimal Mark { get; set; }
  

Если я изменю его с десятичного на строку, он не будет жаловаться. Что происходит?

Редактировать

Я думаю, что из-за этого [Number(ErrorMessage = "Message")] аннотация. Я использую эту библиотеку расширений аннотаций данных

Похоже, что я не использую десятичные дроби. Кто-нибудь знает почему?

Ответ №1:

Если вы используете тип decimal, вам не нужно использовать атрибут [Numeric], потому что MVC уже видит, что вы используете числовой тип, и вводит его для вас (что вызывает ошибку). При изменении на строку [Числовое значение] затем необходимо, чтобы сообщить проверке, как вы хотите, чтобы эта строка работала.

В следующей версии DataAnnotationsExtensions я изменю атрибут [Numeric], чтобы в этом случае он не конфликтовал с версией MVC. Но на данный момент удаление атрибута [Numeric] будет просто прекрасным, потому что [Numeric] для числового типа в любом случае избыточен.

Комментарии:

1. Верно, совершенно забыл об этом. Однако я бы сказал, что все же было бы желательно иметь возможность делать, поскольку у вас нет контроля над сообщением, генерируемым при сбое привязки (или, по крайней мере, я не думаю, что вы это делаете). Это также только на стороне сервера, а не на стороне клиента.

Ответ №2:

Вероятно, у вас есть несколько средств проверки модели, которые дважды добавляют одно и то же правило клиента, используете ли вы пользовательский поставщик проверки?

Комментарии:

1. Я использую пользовательский поставщик проверки и получаю эту ошибку. Почему? Что я могу сделать? Это поставщик проверки, который я использую: Knoema. Локализация.Mvc.ValidationLocalizer

Ответ №3:

Required станет дублироваться, поскольку Mark не обнуляется. Я бы изменил это на decimal?