Главная страница   /   20.1. Обзор проекта для примера (ASP.NET MVC 4

ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

20.1. Обзор проекта для примера

В этой главе мы продолжим использовать проект 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.