Литмир - Электронная Библиотека

  управляющими инструкциями

<% } %>

Пример использования цикла приведен в листинге 5.6, применение условий выглядит аналогично:

<% if (Request.IsAuthenticated) { %>

  Добро пожаловать

  <b><%= Html.Encode(Page.User.Identity.Name) %></b>!

  [ <%= Html.ActionLink("Выход", "LogOff", "Account") %> ]

<%

  } else {

%>

  [ <%= Html.ActionLink("Вход", "LogOn", "Account") %> ]

<% } %>

Вспомогательные методы

Вспомогательные методы класса HtmlHelper, доступного как свойство Html для представлений и частичных представлений, уже неоднократно встречались в коде ранее. Теперь пришла пора рассмотреть подробнее, какую функциональность они несут и какие задачи решают.

Вспомогательные методы применяются тогда, когда необходимо многократно использовать какую-либо функциональность — от генерации часто применяемой разметки до реализации функциональности элементов управления, таких как кнопки, текстовые поля, гиперссылки и т. д.

Вспомогательным методом может быть любой статический метод, доступный на уровне представления, однако для упрощения общей структуры проектов MVC их принято группировать в рамках класса HtmlHelper. В табл. 5.1 приведен список основных вспомогательных методов класса HtmlHelper.

Таблица 5.1. Вспомогательные методы класса HtmlHelper

Asp.net mvc framework - img_34

Asp.net mvc framework - img_35

Asp.net mvc framework - img_36

Большая часть вспомогательных методов реализованы как методы-расширения C# 3.0 для класса HtmlHelper (статические методы, определенные вне класса HtmlHelper). Такой подход был избран для того, чтобы разработчики легко могли расширять набор вспомогательных методов в собственных классах и не перегружать сам класс HtmlHelper.

Далее рассмотрено применение каждого из методов, описанных в табл. 5.1. Методы сгруппированы по сходству решаемых задач.

Кодирование текста и атрибутов

При выводе любого текста на страницу, либо в качестве значений атрибутов тегов необходимо обеспечить соответствие этого текста HTML-формату, заменив HTML-символы на их коды, чтобы браузер не интерпретировал выводимый текст как инструкции разметки страницы.

Кодирование текстов, полученных из неблагонадежных источников (добавленных пользователями, полученных от удаленных веб-служб и т. п.), необходимо для обеспечения безопасности пользователя, работающего со страницей, на которую выводятся эти тексты.

Для кодирования предназначены два вспомогательных метода — Html.AttributeEncode() и Html.Encode().

Пример использования Html.AttributeEncode():

<div someattr="<%= Html.AttributeEncode("<b>Teкст</b>")"></div>

Результирующая разметка:

<div someattr="<b>Teкст</b>"></div>

Пример использования Html.Encode():

<div><%= Html.Encode("<b>Текст</b>")</div>

Результирующая разметка:

<div><b>TeKCT</b>"</div>

Примечание

Важно отметить, что методы Html.AttributeEncode() и Html.Encode() не заменяют символ апострофа (') на соответствующий HTML-код, поскольку не рекомендуется использовать апострофы для атрибутов тегов на HTML-страницах, хотя это и допустимо с точки зрения HTML-стандарта.

**********************************

Гиперссылки на действия контроллеров

Для создания гиперссылок на действия контроллеров используются два основных вспомогательных метода — Html.ActionLink() и Html.RouteLink().

Html.ActionLink()

Метод Html.ActionLink() применяется для ссылок с использованием строковых значений. Например, для ссылки на действие Index, контроллера Home, именуемой "Главная страница", метод используется следующим образом:

Hnml.ActionLink("Главная страница", "Index", "Home")

Результирующая разметка:

<а href="/Home/Index">Главная страница</а>

Для того чтобы передать параметры в строке запроса, методу ActionLink() необходимо передать анонимный объект, содержащий значения параметров в свойствах объекта. При генерации гиперссылки будут учтены параметры маршрутов, зарегистрированных для приложения (подробная информация о маршрутизации приведена в главе 6).

Так, например, если для приложения определен только маршрут

{controller}/{action}/{id}, то следующий вызов метода ActionLink()

Html.ActionLink("Ссылка", "Data", "Home", new { id = 1, ord = 2 })

приведет к генерации такой ссылки:

<a href="/Home/Data/1?ord=2">Ссылка</a>

Если же среди маршрутов определен, например, и такой {controller}/{action}/{id}/{ord}, то будет сгенерирована следующая ссылка:

<a href="/Home/Data/1/2">Сcылка</a>

Для создания абсолютной ссылки, либо ссылки с дополнительными параметрами, такими как протокол, якорь, также можно воспользоваться методом ActionLink().

Html.ActionLink("Сайт microsoft.com", "Express", "VStudio",

  "http", "microsoft.com", "download", new {}, null);

В результате будет создана следующая ссылка:

<a href="http://microsoft.com/VStudio/Express#download">

  Сайт microsoft.com</a>

Html. RouteLink()

Метод Html.RouteLink() используется для создания ссылок на основании определенных для приложения маршрутов, о которых подробнее можно узнать в следующей главе. Так, например, можно сослаться на определенный именованный маршрут, передав параметры в виде анонимного объекта.

Html.RouteLink("Ссылка", "MyRoute",

  new { action = "hello", id = 1 });

В результате будет создана следующая ссылка, при условии, что маршрут SomeRoute определен как mycontroller/{action}/sometext/{id}.

<a href="/mycontroller/hello/sometext/1">Сcылка</a>

Элементы управления HTML-страницы

37
{"b":"971383","o":1}