ASP .NET MVC

Программирование и разработка сайтов с использованием технологии ASP .NET MVC

Контроллер

Контроллеры необходимы для обеспечения взаимодействия между моделью и представлением. Все контроллеры наследуются от класса Controller, который в свою очередь является наследником класса ControllerBase, реализующего интерфейс IController. Интерфейс IController имеет основной метод - Execute, который принимает параметр RequestContext, с его помощью можно выдавать в представление абсолютно любые типы данных.

Для создания контроллера, нужно создать класса реализующий интерфейс IController. При этом следует обратить внимание на именование, т.к. контроллеры тесно связаны с маршрутами. Проще говоря, если у вас есть папка представления Home (Views/Home), то имя контроллера должно быть HomeController, а для представления Admin – AdminController, и т.п. Если вы используете в качестве инструмента для разработки Visual Studio, то это не должно вызвать у вас никаких проблем.

По умолчанию у каждого контроллера вызывается функция Index. Имена функций должны соответствовать именам файлов в представлении, например, в папке Account есть файл LogOn.aspx, имя функции в контроллере для обработки этого файла будет LogOn.

Рассмотрим стандартный код функции LogOn:

 

public ActionResult LogOn()
    {
      return View();
    }

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
      if (ModelState.IsValid)
      {
        if (MembershipService.ValidateUser(model.UserName, model.Password))
        {
          FormsService.SignIn(model.UserName, model.RememberMe);
          if (!String.IsNullOrEmpty(returnUrl))
          {
            return Redirect(returnUrl);
          }
          else
          {
            return RedirectToAction("Index", "Home");
          }
        }
        else
        {
          ModelState.AddModelError(", "Имя пользователя или пароль указаны неверно.");
        }
      }

      // Появление этого сообщения означает наличие ошибки; повторное отображение формы
      return View(model);
    }

Как видите, тут две функции LogOn. Первая предназначена для обработки методов GET и не имеет никакого функционала. Строчка кода return View; передает в представление данные из контроллера.

Вторая функция обрабатывает HTTP-метод POST, на это указывает атрибут [HttpPost] (для GET запросов тоже есть атрибут – HttpGet, однако он используется по умолчанию и указывать его не обязательно). Функция принимает два параметра – модель, и адрес возврата. Модель, как видно из названия, реализуется в модели данных – т.е. это класс. Через модель со страницы от пользователя передаются данные в котроллер.

Рассмотрим код представления:

 

<% using (Html.BeginForm()) { %>
        <%= Html.ValidationSummary(true, "Не удалось выполнить вход. Исправьте ошибки и повторите попытку.") %>
        <div>
            <fieldset>
                <legend>Сведения учетной записи</legend>
                
                <div class="editor-label">
                    <%= Html.LabelFor(m => m.UserName) %>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(m => m.UserName) %>
                    <%= Html.ValidationMessageFor(m => m.UserName) %>
                </div>
                
                <div class="editor-label">
                    <%= Html.LabelFor(m => m.Password) %>
                </div>
                <div class="editor-field">
                    <%= Html.PasswordFor(m => m.Password) %>
                    <%= Html.ValidationMessageFor(m => m.Password) %>
                </div>
                
                <div class="editor-label">
                    <%= Html.CheckBoxFor(m => m.RememberMe) %>
                    <%= Html.LabelFor(m => m.RememberMe) %>
                </div>
                
                <p>
                    <input type="submit" value="Вход" />
                </p>
            </fieldset>
        </div>
    <% } %>

Например, строк Html.TextBoxFor(m => m.UserName) - создает на странице текстовое поле и привязывает его к свойству модели - UserName. 

Сам класс реализованный в модели имеет следующий вид:

 

public class LogOnModel
  {
    [Required]
    [DisplayName("Имя пользователя")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [DisplayName("Пароль")]
    public string Password { get; set; }

    [DisplayName("Запомнить меня")]
    public bool RememberMe { get; set; }
  }

Здесь нужно обратить внимание на имя класса, а точнее на его вторую часть LogOnModel. Именно по такому принципу вы должны будете делать свои классы моделей, которые нужно будет передавать в представление, т.е. практически все.

© mvcnet.ru, 2010 


К этой записи пока нет комментариев. Будьте первым.



* Ваше имя:
Сайт или блог:
* Комментарий:
Только текст, html-теги запрещены.
* Секретный код: