#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?