UR.ANUS
Asp.net mvc framework
вернуться

Магдануров Гайдар Ильдарович

Шрифт:

Несколько большую интерактивность взаимодействия с элементом управления можно реализовать за счет создания специального вспомогательного метода, взаимодействующего с этим элементом управления.

Сделать это можно просто, учитывая, что класс Webcontrol, которому наследуют классы конкретных элементов управления, содержит метод Render, генерирующий разметку. Как раз метод Render применяет инфраструктура WebForms для всех элементов управления на страницах. Пример использования элемента управления WebForms приведен в листинге 5.14.

Листинг 5.14. Пример использования класса Button во вспомогательном методе

public static class WebFormsHelper {

public static string WebFormsButton(this HtmlHelper html)

{

Button control = new Button { Text = "Web Forms Button" };

StringBuilder sb = new StringBuilder;

HtmlTextWriter htmlWriter = new HtmlTextWriter(

new StringWriter(sb));

control.RenderControl(htmlWriter);

return sb.ToString;

}

}

Листинг 5.14 демонстрирует концепцию использования серверных элементов управления: создать экземпляр класса элемента управления, задать его свойства, вызвать при необходимости методы, а затем сгенерировать разметку, которая будет возвращена вспомогательным методом.

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

Частичные представления

Ранее в этой главе уже говорилось об использовании частичных представлений. Механизм частичных представлений позволяет многократно использовать разметку в разных методах контроллеров, аналогично примеру из листингов 5.1—5.3. Кроме того, частичные представления могут быть использованы для отображения списков элементов. Так, в листинге 5.15 приведено частичное представление, которое используется для отображения строк таблицы товаров в представлении Index.aspx, код которого приведен в листинге 5.16.

Листинг 5.15. Частичное представление ProductListItem.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<

MvcViewsDemo.Models.Product>" %>

<tr>

<td>

<%= Html.ActionLink("Изменить", "Edit", new { id=Model.ProductID }) %>

</td>

<td>

<%= Html.Encode(Model.ProductID)%>

</td>

<td>

<%= Html.Encode(Model.ProductName)%>

</td>

<td>

<%= Html.Encode(String.Format("{0:F}", Model.UnitPrice))%>

</td>

<td>

<%= Html.Encode(Model.UnitsInStock)%>

</td>

<td>

<%= Html.Encode(Model.UnitsOnOrder)%>

</td>

</tr>

Листинг 5.16. Представление Index.aspx

<%@ Page Title="" Language="C#"

MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<IEnumerable<

MvcViewsDemo.Models. Product»" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent"

runat="server">

Список товаров

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent"

runat="server">

<h2>

Список товаров

</h2>

<table>

<tr>

<th>

</th>

<th>

Код товара </th>

<th>

Название

</th>

<th>

Цена

</th>

<th>

На складе

</th>

<th>

Заказано

</th>

</tr>

<% foreach (var item in Model)

{ %>

<% Html.RenderPartial("ProductListItem", item); %>

<% } %>

</table>

</asp:Content>

  • Читать дальше
  • 1
  • ...
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • ...

UR.ANUS - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • support@anus.bid