Листинг 14-2: Использование вспомогательного метода Html.ActionLink для генерации исходящих URL



@{

Layout = null;

}

<!DOCTYPE html>

<html>

<head>

<meta name="viewport" content="/>

<title>ActionName</title>

</head>

<body>

<div>The controller is: @ViewBag.Controller</div>

<div>The action is: @ViewBag.Action</div>

<div>

@Html.ActionLink("This is an outgoing URL", "CustomVariable")

</div>

</body>

</html>

 

Покажите генерацию исходящих URL в методах действия.

(Әрекет әдістерінде шығатын URL-мекен-жайларын көрсету)

App_Start / RouteConfig.cs файлын мысалға сәйкес өңдеңіз:

using System.Web.Mvc;

using System.Web.Routing;

Namespace UrlsAndRoutes

{

Public class RouteConfig

{

Public static void RegisterRoutes(RouteCollection routes)

   {

routes.MapMvcAttributeRoutes();

Routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

Defaults: new

           {

controller = "Home",

action = "Index",

id = UrlParameter.Optional

           });}}}

MVC 5 пакеті шығыс URL-мекен-жайларын шығаруға көмекші әдістерді пайдалану үшін қажет.

Көріністегі шығатын URL мекенжайларын жасау:

Іс жүзінде әрбір MVC Framework қолданбасы пайдаланушыларға бір көріністен екіншісіне көшуді талап етеді, бұл әдетте бірінші көріністе екінші көріністі қалыптастыратын әрекет әдісіне бағытталған сілтеме қамтитын қамтуы керек.

<а href="/Home/CustomVariable">Простая ссылка</a>

Стандартты бағыттау конфигурациясымен, бұл HTML элементі Home controller ішіндегі CustomVariable () әдісіне бағытталған сілтеме жасайды.

Как произвести настройку специального маршрута? Для чего нужен класс RouteBase?

Иногда возникает необходимость, более точно задать совпадение строки запроса для данного маршрута. Например, нам надо задать, чтобы имя контроллера обязательно начиналось с буквы "H". Тогда нам надо определить соответствующее ограничение для имени с помощью регулярных выражений:

Routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },

constraints: new {controller="^H.*" }

);

С помощью параметра constraints устанавливаются ограничения маршрута. И если мы направим приложению запрос Book/Index, даже если у нас есть контроллер BookController с методом Index, то приложение вернет ошибку, так как имя контроллера попадает под ограничение, а другого маршрута, которому бы соответствовал запрос Book/Index, у нас не задано.

Подобным образом мы можем задать ограничения и для других параметров. Например, пусть параметр id состоит как минимум из двух цифр:

Routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}/{*catchall}",

defaults: new { controller = "Home", action = "Index" },

constraints: new { controller = "^H.*", id = @"\d{2}" }

);

Теперь даже запрос Home/Index/1 у нас не будет сопоставляться с маршрутом, так как параметр id состоит из одной цифры, а не из двух.

Также мы можем задать ограничение по типу метода. Например, мы хотим, чтобы обрабатывались только запросы для методов с типом GET:

Routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}/{*catchall}",

defaults: new { controller = "Home", action = "Index" },

constraints: new { controller = "^H.*", id = @"\d{2}", httpMethod=new HttpMethodConstraint("GET") }

);

Для чего нужен класс RouteBase?

Служит базовым классом для всех классов, представляющих маршрут ASP.NET

RouteBase Позволяет создавать настраиваемые классы для определения маршрутов в приложении. Как правило, будет использоваться Route класса при определении маршрутов. Класс Route является производным от класса RouteBase. Тем не менее, если вы хотите предоставляют различные возможности, чем то, что обеспечивается Route класс, создайте класс, производный от RouteBase и реализации свойств и методов, которые необходимы.

Иерархия наследования

System.Object
  System.Web.Routing.RouteBase
    System.Web.Routing.RouteИнициализирует класс для использования экземпляром унаследованного класса. Этот конструктор может вызываться только унаследованным классом.


Дата добавления: 2018-02-15; просмотров: 125;