К книге
ASP.NET MVC FrameworkГЛАВА 5 Представление и интерфейс приложения. Генерация разметки представлением. Вложенный управляющий код
48%
ГЛАВА 5 Представление и интерфейс приложения. Генерация разметки представлением. Вложенный управляющий код
72

Рассмотрим простейший пример — в представлении необходимо вывести таблицу, содержащую набор записей, переданных контроллером через коллекцию viewData. В качестве источника данных используется ставшая уже стандартом де-факто для примеров база данных Northwind, для доступа к которой используется LINQ для SQL, подробно описанный в главе 3.

В примере мы будем работать с классом Customer, упрощенное представление которого приведено в листинге 5.5.

Листинг 5.5. Класс Customer

public class Customer {

  public string CustomerlD {get; set;}

  public string CompanyName {get; set;}

  public string ContactName {get; set;}

  public string ContactTitle {get; set;}

  public string Address {get; set;}

  public string City {get; set;}

  public string Region {get; set;}

  public string PostalCode {get; set;}

  public string Country {get; set;}

  public string Phone {get; set;}

  public string Fax {get; set;}

  public EntitySet<CustomerCustomerDemo>

       CustomerCustomerDemos {get; set;}

  public EntitySet<Order> Orders {get; set;}

}

Данные передаются контроллером HomeController представлению Index.aspx через коллекцию viewData в качестве перечислимой коллекции, возвращаемой вспомогательным методом-оберткой над стандартными классами, созданными LINQ для SQL. Код, отвечающий непосредственно за получение данных, не представляет интереса для целей этого примера и не приводится.

public ActionResult Index()

{

  NorthwindDatabase db = new NorthwindDatabase();

  ViewData["Message"] = "Список сотрудников";

  ViewData["Customers"] =

        db.GetCustomers(c => c.CompanyName, 5);

  return View () ;

}

В результате представлению Index.aspx будет передана коллекция объектов типа Customer, которую требуется представить в виде таблицы. С использованием управляющего кода разметка представления может выглядеть так, как показано в листинге 5.6.

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

<%@ Page Language="C#"

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

         Inherits="System.Web.Mvc.ViewPage" %>

<%@ Import Namespace="MvcViewsDemo.Models" %>

<asp:Content ID="indexTitle"

    ContentPlaceHolderID="TitleContent" runat="server">

      Домашняя страница

</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">

  <h2>

  <%= Html.Encode(ViewData ["Message"]) %></h2>

  <table>

  <thead>

    <tr>

      <th>

        Название компании

      </th>

     <th>

        Контактное лицо

      </th>

    </tr>

  </thead>

  <% foreach

       (Customer c in (IEnumerable<Customer>)ViewData["Customers"]

     ) { %>

   <tr>

     <td>

       <%= c.CompanyName %>

     </td>

     <td>

       <%= c.ContactName %>

     </td>

   </tr>

  <% } %>

  </table>

</asp:Content>

В результате выполнения примера приведенное ранее представление будет отображено в виде, показанном на рис. 5.1.

В тексте листинга 5.6 управляющие конструкции выделены полужирным шрифтом.

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

<%= значение %>

Конструкция вида <%= значение %> используется для вывода значений в результирующий код HTML-разметки. Тип значения может быть любым, который может быть приведен к строке. Значение будет выведено именно в том месте разметки, в котором оно размещено.

<% управляющая конструкция %>

Управляющие инструкции позволяют проверять выполнение некоторых условий для вывода той или иной HTML-разметки (условия) либо многократно повторять фрагменты HTML-разметки (циклы).

Оформляются управляющие конструкции по приведенному далее шаблону.

<% инструкция (условия) { %>

  Произвольный HTML-код, который может

  перемежаться другими

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

<% } %>

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

<% if (Request.IsAuthenticated) { %>

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

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

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

<%

  } else {

%>

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

<% } %>

Предыдущая главаГлава 72 из 150Следующая глава