Вспомогательные методы для URL
177ASP.NET --- ASP.NET MVC 5 --- Вспомогательные методы для URL
Одной из наиболее фундаментальных задач в представлении является создание ссылки или URL, с помощью которого пользователь может перейти к другой части приложения. В этой статье мы сгруппируем все рассмотренные ранее методы и опишем их.
Мы продолжим пользоваться проектом HelperMethods, который создали ранее. Для целей этой и последующих статей создан новый контроллер по имени People, код которого приведен в примере ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using HelperMethods.Models;
namespace HelperMethods.Controllers
{
public class PeopleController : Controller
{
private List<User> UserData = new List<User> {
new User {FirstName = "Иван", LastName = "Иванов", Role = Role.Admin},
new User {FirstName = "Петр", LastName = "Петров", Role = Role.User},
new User {FirstName = "Сидор", LastName = "Сидоров", Role = Role.User},
new User {FirstName = "Вася", LastName = "Васильев", Role = Role.Guest}
};
public ActionResult Index()
{
return View();
}
public ActionResult GetPeople()
{
return View(UserData);
}
[HttpPost]
public ActionResult GetPeople(string selectedRole)
{
if (selectedRole == "All" || selectedRole == null)
return View(UserData);
else
{
Role roleSelected = (Role)Enum.Parse(typeof(Role), selectedRole);
return View(UserData.Where(user => user.Role == roleSelected));
}
}
}
}
В этом контроллере определяется коллекция объектов модели User, которая будет применяться для демонстрации функциональных возможностей вспомогательных методов. Никакие новые приемы в этом контроллере не используются. Метод действия Index() возвращает стандартное представление. Мы будем применять два метода действий GetPeople() для обработки простой формы. Новые средства, рассматриваемые далее, проявляются в представлениях, которые будут созданы при демонстраций различных вспомогательных методов.
Также необходимо добавить в проект несколько новых стилей CSS, что и делается в файле Views/Shared/_Layout.cshtml. Элементы, к которым будут применены эти стили, определяются позже:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
<style>
/* ... */
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;
}
</style>
</head>
<body>
@RenderBody()
</body>
</html>
В предыдущих статьях вы уже видели большинство вспомогательных методов, которые можно применять для создания ссылок и URL, но мы хотим воспользоваться моментом, чтобы напомнить о них, прежде чем переходить к рассмотрению ряда более сложных вспомогательных методов. В таблице ниже описаны доступные вспомогательные методы HTML и приведены примеры их применения.
Метод | Описание | Пример | Результат |
---|---|---|---|
Url.Content() | URL, относящиеся к приложению |
Url.Content("~/Content/Site.css") |
/Content/Site.css |
Html.ActionLink() | Ссылка на именованное действие и контроллера |
Html.ActionLink("Моя ссылка", "Index", "Home") |
<a href="/Home/Index">Моя ссылка</a> |
Url.Action() | URL для действия |
Url.Action("GetPeople", "People") |
/People/GetPeople |
Url.RouteUrl() | URL, использующий данные маршрутизации |
Url.RouteUrl( new { controller = "People", action="GetPeople" }) |
/People/GetPeople |
Ссылка, использующая данные маршрутизации |
Html.RouteLink("Моя ссылка", new { controller = "People", action="GetPeople" }) |
<a href="/People/GetPeople">Моя ссылка</a> |
|
Ссылка на именованный маршрут |
Html.RouteLink("Моя ссылка", "FormRoute", new { controller = "People", action="GetPeople" }) |
<a href="/app/form/People/GetPeople">Моя ссылка</a> |
В качестве напоминания: преимущество от использования этих вспомогательных методов для генерации ссылок и URL состоит в том, что вывод производится из конфигурации маршрутизации, а это значит, что любое изменение в маршрутах автоматически отражается в ссылках и URL.
Чтобы продемонстрировать работу этих вспомогательных методов, в папку Views/People добавлен файл представления Index.cshtml, содержимое которого приведено в примере ниже:
@{
ViewBag.Title = "Index";
Layout = "/Views/Shared/_Layout.cshtml";
}
<h2>Базовые ссылки и URL'ы</h2>
<table>
<thead><tr><th>Код</th><th>Генерирует</th></tr></thead>
<tbody>
<tr>
<td>Url.Content("~/Content/Site.css")</td>
<td>@Url.Content("~/Content/Site.css")</td>
</tr>
<tr>
<td>Html.ActionLink("Моя ссылка", "Index", "Home")</td>
<td>@Html.ActionLink("Моя ссылка", "Index", "Home")</td>
</tr>
<tr>
<td>Url.Action("GetPeople", "People")</td>
<td>@Url.Action("GetPeople", "People")</td>
</tr>
<tr>
<td>Url.RouteUrl(new {controller = "People", action="GetPeople"})</td>
<td>@Url.RouteUrl(new { controller = "People", action = "GetPeople" })</td>
</tr>
<tr>
<td>
Html.RouteLink("Моя ссылка", new {controller = "People",
action="GetPeople"})
</td>
<td>
@Html.RouteLink("Моя ссылка", new
{
controller = "People",
action = "GetPeople"
})
</td>
</tr>
<tr>
<td>
Html.RouteLink("Моя ссылка", "FormRoute", new {controller = "People",
action="GetPeople"})
</td>
<td>
@Html.RouteLink("Моя ссылка", "FormRoute", new
{
controller = "People",
action = "GetPeople"
})
</td>
</tr>
</tbody>
</table>
Это представление содержит тот же самый набор вызовов вспомогательных методов, что и перечисленный в таблице выше. Чтобы взглянуть на результат, запустите приложение и перейдите на URL вида /People/Index:
