ASP.NET MVC 4
Адам Фриман
Обзор и подготовка проекта для примера
Мы собираемся продолжать использовать проект 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;}
...