#c# #asp.net-mvc-2 #data-annotations
#c# #asp.net-mvc-2 #данные-аннотации
Вопрос:
У меня есть базовый объект DTO, который я пытаюсь обновить, я заметил, что если я отправляю некоторые данные из пользовательского интерфейса в контроллер и ввожу строку внутри десятичного поля, проверка аннотаций данных не распознает это, фактически строка по какой-то причине преобразуется в 0…
Как мне заставить мои десятичные значения оставаться десятичными, т. Е. выдавать ошибку, если добавлена строка, нужно ли мне создавать поставщика пользовательских значений для этого объекта DTO?
Мой DTO:
public class FeesDTO
{
public int ID{ get; set; }
//[DataType( DataType.Currency)]
//[DisplayFormat(ApplyFormatInEditMode=true)]
public decimal ClientFee { get; set; }
public string VAT { get; set; }
public string GrossProfit { get; set; }
}
Если я хочу обновить свои сборы и ввожу «что-то» внутри поля ClientFee, это превращает ввод строки в 0…
ПРИМЕЧАНИЕ:
Закомментированные аннотации данных не сработали… Это правильный способ сделать это?
Ответ №1:
когда вы вводите строковое значение, например, «xyz» для ClientFee, которое является десятичной переменной, его нельзя преобразовать в десятичную, и вы получите 0 в качестве значения clientfee, но когда форма будет отображена снова, вы увидите сообщение о проверке, сообщающее вам, что
xyz is not valid for field clientfee
возможно, это связано с тем, что, когда modelbinder не удается преобразовать xyz в десятичное число, это добавляет ошибку в коллекцию ошибок Modelstate dictionary. вы можете создать это значение string в вашей viewmodel и проверить его самостоятельно с помощью regex, а когда вы хотите сохранить его в db, вы можете преобразовать его в свой объект с помощью AutoMapper к аналогичной утилите.
Комментарии:
1. Аааа… Я забыл добавить modelstate.isvalid внутри моего контроллера, ошибки перехватываются поставщиком стандартной модели. Спасибо, что направили меня в правильном направлении … ужасная ошибка. 😉
Ответ №2:
Я думаю, вам нужно использовать средства проверки аннотаций данных:
http://www.asp.net/mvc/tutorials/validation-with-the-data-annotation-validators-cs
Внедрите его в поле Decimal, которое выдает ошибку проверки, если элемент управления отправлен с записью, отличной от десятичной.
Комментарии:
1. что, если бы я вообще не хотел использовать аннотации данных? Как еще можно проверить стандартные свойства? Я мог бы создать поставщика значений, но я действительно не хочу создавать его для всех моих объектов DTO…