Обзор проекта для примера
В этой главе мы продолжим использовать проект HelperMethod
, который создали в главе 19. Здесь у нас есть класс модели Person
и пара сопровождающих типов. Чтобы легче было вспомнить, мы перечислили их в листинге 20-1.
Листинг 20-1: Типы Person, Address и Role
using System;
namespace HelperMethods.Models
{
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public Address HomeAddress { get; set; }
public bool IsApproved { get; set; }
public Role Role { get; set; }
}
public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
public enum Role
{
Admin,
User,
Guest
}
}
Пример проекта содержит очень простой контроллер Home
, с помощью которого мы отображаем формы и получаем данные от них. Определение класса HomeController
показано в листинге 20-2.
Листинг 20-2: Класс HomeController
using System.Web.Mvc;
using HelperMethods.Models;
namespace HelperMethods.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Fruits = new string[] {"Apple", "Orange", "Pear"};
ViewBag.Cities = new string[] {"New York", "London", "Paris"};
string message = "This is an HTML element: <input>";
return View((object) message);
}
public ActionResult CreatePerson()
{
return View(new Person());
}
[HttpPost]
public ActionResult CreatePerson(Person person)
{
return View(person);
}
}
}
В этой главе мы будем использовать два метода действий CreatePerson
, каждый из которых визуализирует представление /Views/Home/CreatePerson.cshtml
. В листинге 20-3 показано представление CreatePerson
, которое мы создали в конце главы 19.
Листинг 20-3: Представление CreatePerson
@model HelperMethods.Models.Person
@{
ViewBag.Title = "CreatePerson";
Html.EnableClientValidation(false);
}
<h2>CreatePerson</h2>
@using (Html.BeginRouteForm("FormRoute", new {}, FormMethod.Post,
new {@class = "personClass", data_formType = "person"}))
{
<div class="dataElem">
<label>PersonId</label>
@Html.TextBoxFor(m => m.PersonId)
</div>
<div class="dataElem">
<label>First Name</label>
@Html.TextBoxFor(m => m.FirstName)
</div>
<div class="dataElem">
<label>Last Name</label>
@Html.TextBoxFor(m => m.LastName)
</div>
<div class="dataElem">
<label>Role</label>
@Html.DropDownListFor(m => m.Role,
new SelectList(Enum.GetNames(typeof (HelperMethods.Models.Role))))
</div>
<input type="submit" value="Submit" />
}
В него мы внесли одно изменение, которые выделено жирным шрифтом. По умолчанию, вспомогательные методы добавляют атрибуты data
к HTML-элементам, таким образом обеспечивая валидацию форм, которую мы рассмотрели в главе 9 на примере приложения SportsStore. В этой главе мы не хотим их использовать, так что мы отключили их для представления CreatePerson
с помощью метода Html.EnableClientValidation
. Для остальной части приложения валидация на стороне клиента по-прежнему активирована. Подробно механизм валидации (в том числе и назначение data-
атрибутов) мы рассмотрим в главе 23.