порядок исполнения MVC - PullRequest
       1

порядок исполнения MVC

0 голосов
/ 29 декабря 2010

Просто пытаюсь изучать MVC2 / .net 4.0 одновременно. Я просто использую универсальный шаблон, который поставляется с VS при запуске проекта «MVC 2 Web» (т. Е. Для вас настроены контроллер учетных записей и домашние контроллеры)

Итак, мой вопрос заключается в том, что представление снова строго типизировано моделью. Модель выглядит так:

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password do not match.")]
public class RegisterModel {
    [Required]
    [DisplayName("User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    [DisplayName("Email address")]
    public string Email { get; set; }

    [Required]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    [DisplayName("Password")]
    public string Password { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Confirm password")]
    public string ConfirmPassword { get; set; }

    [Required]
    [DisplayName("School")]
    public string School { get; set; }

}

тогда я полагаю, что я нажимаю "зарегистрироваться" на моей веб-странице, и на моем контроллере выполняется следующее:

  [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
        return View(model);
    }

так пару вопросов.

1) Классы, которые [] выше имени метода ... выполняются ли они (я не знаю, какой термин здесь использовать) в первую очередь? Например, модель имеет [ValidatePasswordLength] над своим свойством. Означает ли это, что при отправке пароля, который не подтвержден, он даже не попал в контроллер? Могу ли я также поместить эту логику в контроллер?

2) Откуда взялся ModelState класс?

Я просто хочу узнать в блок-схеме, как все связано в MVC. Кажется, это большой круг, и отправной точки нет.

1 Ответ

0 голосов
/ 30 декабря 2010

Атрибуты выполняются не столько, сколько проверено.

Во время привязки модели модель вида будет сканироваться на наличие атрибутов, связыватель модели получает список этих атрибутов и может затем изменить свое поведение (например, [связывание] влияет, если связыватель модели попытается заполнить заданное свойство) или вызвать класс (например, атрибуты проверки).

Чтобы конкретно ответить на ваши вопросы:

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

2) ModelState происходит из ModelBinder.

Самый простой способ увидеть, как работает MVC, - это загрузить исходный код, выполнить отладку и выполнить запрос.

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