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

ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

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

Мы собираемся продолжать использовать проект HelperMethods, который мы создали в главе 19 и дополнили в главе 20. Некоторые из наших примеров в данной главе будут использовать информацию о маршрутизации, которую мы определили в проекте, и это, как напоминание, показано в листинге 21-1.

Листинг 21-1: Содержание файла /App_Start/RouteConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace HelperMethods
{
	public class RouteConfig
	{
		public static void RegisterRoutes(RouteCollection routes)
		{
			routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
			routes.MapRoute(
				name: "Default",
				url: "{controller}/{action}/{id}",
				defaults: new
				{
					controller = "Home",
					action = "Index",
					id = UrlParameter.Optional
				}
			);
			routes.MapRoute(
				name: "FormRoute",
				url: "app/forms/{controller}/{action}"
			);
		}
	}
}

Наша конфигурация маршрутизации довольно проста. Она состоит из роута по умолчанию, добавленного Visual Studio, когда проект был создан, и дополнительного роута FormRoute, который имеет два статических сегмента.

Для этой главы мы создали новый контроллер People, как показано в листинге 21-2. Этот контроллер определяет коллекцию объектов Person, которую мы будем использовать, чтобы продемонстрировать различные функции вспомогательных методов.

Листинг 21-2:Контроллер People
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using HelperMethods.Models;
namespace HelperMethods.Controllers
{
	public class PeopleController : Controller
	{
		private Person[] personData = {
			new Person {FirstName = "Adam", LastName = "Freeman", Role = Role.Admin},
			new Person {FirstName = "Steven", LastName = "Sanderson", Role = Role.Admin},
			new Person {FirstName = "Jacqui", LastName = "Griffyth", Role = Role.User},
			new Person {FirstName = "John", LastName = "Smith", Role = Role.User},
			new Person {FirstName = "Anne", LastName = "Jones", Role = Role.Guest}
		};

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

		public ActionResult GetPeople()
		{
			return View(personData);
		}

		[HttpPost]
		public ActionResult GetPeople(string selectedRole)
		{
			if (selectedRole == null || selectedRole == "All")
			{
				return View(personData);
			}
			else
			{
				Role selected = (Role)Enum.Parse(typeof(Role), selectedRole);
				return View(personData.Where(p => p.Role == selected));
			}
		}
	}
}

Мы не использовали никаких новых технических приемов в этом контроллере. Метод действия Index возвращает представление по умолчанию. Мы будем использовать два метода действия GetPeople для обработки простой формы. Новые возможности в этой главе появляются в представлениях, которые мы создадим, когда будем показывать различные вспомогательные методы.

Мы также должны добавить к проекту некоторые новые стили CSS. В предыдущих главах мы показали, что можно определить стили в отдельных представлениях или макетах, но мы собираемся определить нужные нам стили в файле /Content/Site.css, для которого есть элемент link в файле /Views/Shared/_Layout.cshtml. Вы можете увидеть, какие стили мы добавили в Site.css, в листинге 21-3. Мы определим элементы, к которым они применяют, далее в этой главе.

Листинг 21-3: Добавление стилей в файл Site.css
...
table, td, th {
	border: thin solid black; border-collapse: collapse; padding: 5px;
	background-color: lemonchiffon; text-align: left; margin: 10px 0;
}
div.load {color: red; margin: 10px 0; font-weight: bold;}
div.ajaxLink {margin-top: 10px;margin-right: 5px;float: left;}
...