Где лучше всего определить валидацию для поля? - PullRequest
1 голос
/ 29 сентября 2010

Поле имени должно быть проверено как начинающееся с заглавной буквы и не имеющее возможности принимать число.Я сделаю это с помощью регулярных выражений.Реализация шаблона MVC.

Если мне нужно, чтобы контроллер отправил значение, которое было введено, в проверочный класс и отправил соответствующие сообщения об ошибках обратно в пользовательский интерфейс, а после проверки вызвал класс, который записывает его в БД
ИЛИ
должен ли контроллер отправлять «ввод значений» в класс, который записывает его в БД, и этот метод затем вызывает метод проверки?

Ответы [ 4 ]

1 голос
/ 29 сентября 2010

вы можете использовать что-то вроде этого (я использовал для проверки электронной почты)

    [Required(ErrorMessageResourceType = typeof(CCSModelResources), ErrorMessageResourceName = "ANTCommonTextRequiredMessage")]
    [RegularExpression(@"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$",
        ErrorMessageResourceType = typeof(CCSModelResources), ErrorMessageResourceName = "ANTCommonTextRegularExpressionMessage")]
    public new string EmailAddress 
    {
        get { return base.EmailAddress; }
        set { base.EmailAddress = value; } 
    }

и ваш код контроллера как

    [Authorize]        
    [HttpPost]
    public ActionResult UpdatePersonalDetails(FormCollection form)
    {
        regUserWizard.PersonalDetails = new MVCPersonalDetails();

        if (!TryUpdateModel<MVCPersonalDetails>(regUserWizard.PersonalDetails, form.ToValueProvider()))
        {
            return View("UpdateUser", regUserWizard);
        }
else
        {
            //you code
        }

        return RedirectToAction("Index", "Home");
    }

Вы просматриваете код как

<% = Html.ValidationSummary ("Создание учетной записи не удалось. Пожалуйста, исправьте ошибки и повторите попытку.")%> <% Html.EnableClientValidation (); using (Html.BeginForm ()) {%> // вы код

0 голосов
/ 29 сентября 2010

По моему мнению, все зависит от того, какую проверку вы хотите выполнить:
1. Если вы не хотите, чтобы поле было пустым, я сделаю эту проверку на слое вида.Именно здесь можно применить большинство регулярных выражений.
2. Если я хочу убедиться, что пользовательский ввод (скажем, имя пользователя) уникален или нет, я выполню эту проверку на стороне контроллера и передам любую обратную связь обратноПосмотреть.В последнем случае контроллер может зависеть от абстракции уровня доступа к данным или уровня обслуживания для выполнения фактической проверки.

0 голосов
/ 29 сентября 2010

Целью контроллера является проверка ввода и предоставление действительного ввода для моделей. Ваша модель не должна беспокоиться о том, какие входные данные предоставляются представлениями. Следует сосредоточиться только на бизнес-логике. Вы можете добавить некоторый проверочный код на стороне клиента для простоты использования, но он также должен присутствовать на стороне сервера в целях безопасности.

Ваш первый подход верен ... продолжайте его ...

0 голосов
/ 29 сентября 2010

Первый подход кажется более правильным, поскольку логику доступа к БД не следует смешивать с проверкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...