asp.net mvc — DTO не распознает неверный ввод

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