Проверка типа данных с помощью xVal

2

Я пытаюсь найти лучший способ проверить данные в приложении MVC С#, и xVal, по-видимому, наилучшим образом подходит. Однако я столкнулся с проблемой проверки данных.

Сначала я делал UpdateModel в DTO, а затем выполнял проверку на DTO. Это отлично работает для таких вещей, как обязательные поля, однако UpdateModel генерирует исключение, если вы попытаетесь, например, сопоставить строку ( "asd" ) в десятичное поле. Поскольку UpdateModel должен был быть запущен до того, как были данные для проверки, я не был уверен, как обойти это.

Мое решение состояло в том, чтобы создать DTO для каждой формы, которую будет обновлять UpdateModel, запустить проверку на ней и затем скопировать значения в соответствующие DTO. Все атрибуты в форме DTO были бы строками, поэтому UpdateModel никогда не будет выходить из строя, и я бы обеспечил проверку данных через xVal. Однако, несмотря на то, что правила, подобные обязательным, пинаются, я не могу заставить правило DataType использовать (в этом случае попробовать DataType.Currency).

Я также попытался заставить проверку на стороне клиента работать, но я надеялся, что существует чистый способ проверки на стороне сервера типов данных.

Что делали другие в отношении проверки типов данных на стороне сервера?

  • 0
    Просто чтобы убедиться: под DTO вы имеете в виду свой пользовательский ViewModel?
Теги:
validation
xval

2 ответа

2
Лучший ответ

В результате я создал несколько DTO, которые представляют формы. Эти DTO будут принимать Request.Form и автоматически отображать все значения формы во внутренние свойства (ex public string email, public string firstname), на основе которых они имеют то же имя, что и значения формы.

Они будут иметь все свойства строки, и я бы поместил на них атрибуты xVal. Затем я использовал xVal и регулярные выражения, чтобы убедиться, что данные вступили в силу (с допустимой даты, электронной почты, номера и т.д.). Таким образом, никогда не будет исключение, потому что оно всегда вписывается в строку, а не в .Net, пытаясь разобрать ее на дату или что-то в этом роде.

Это позволит убедиться, что данные всегда делали его в xVal, где я мог выполнить проверку, которую я хочу, а затем преобразовать в соответствующий тип, например DateTime, как только я знаю, что у меня есть достоверные данные.

1

Я использую настраиваемые валидаторы, полученные из ValidationAttribute, для проверки данных, которые должны анализироваться на стороне сервера из строки в другие типы данных. Например:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

Я также нашел способ включить такие атрибуты проверки в атрибуты проверки на стороне клиента и на стороне сервера без написания какого-либо пользовательского кода JavaScript. Я просто должен получить из другого базового класса атрибута проверки. Посмотрите на мою статью статью о проверке на стороне клиента, если вы хотите узнать об этом подробнее.

  • 0
    Валидация не проблема, а в том, где ее хранить до ее валидации. В идеале я хотел, чтобы он копировался в DTO без необходимости модели представления - например, поле валюты переходит в десятичное число и т. Д. Однако это прерывается, когда вы пытаетесь ввести строку в поле int и используете UpdateModel для копирования поля формируют форму в viewmodel или DTO.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню