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
Реализуйте одно в поле "Десятичное число", которое выдает ошибку проверки, если элемент управления размещен с недесятичной записью.