asp.net mvc - DTO не получает неправильный ввод

У меня есть базовый объект 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...

НОТА:

Закомментированные аннотации данных не сработали... Это правильный способ сделать это?

2 ответа

Решение

Когда вы вводите строковое значение, например, "xyz" для ClientFee, которое является десятичной переменной, оно не может быть преобразовано в десятичную, и вы получите 0 в качестве значения clientfee, но при повторной визуализации формы вы увидите сообщение проверки, сообщающее, что

xyz is not valid for field clientfee

возможно, это связано с тем, что, когда modelbinder не удается преобразовать xyz в десятичную, он добавляет ошибку в коллекцию ошибок словаря Modelstate. вы можете сделать эту строку значений в вашей модели представления и проверить ее самостоятельно с помощью регулярных выражений, а когда вы хотите сохранить ее в db, вы можете преобразовать ее в вашу сущность с помощью AutoMapper для аналогичной утилиты.

Я думаю, что вы должны использовать валидаторы аннотации данных:

http://www.asp.net/mvc/tutorials/validation-with-the-data-annotation-validators-cs

Реализуйте одно в поле "Десятичное число", которое выдает ошибку проверки, если элемент управления размещен с недесятичной записью.

Другие вопросы по тегам