управляющими инструкциями
<% } %>
Пример использования цикла приведен в листинге 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
Большая часть вспомогательных методов реализованы как методы-расширения 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-страницы