Чтение онлайн

на главную - закладки

Жанры

Шрифт:

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

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

<table style="border: solid 2px red; margin: 10px;">

<tr>

<td>

1 USD =

</td>

<td>

<%= ViewData["USD"] %> RUB

RUB

</td>

</tr>

</table>

Листинг 5.18. Контроллер GadgetsController

using System.Web.Mvc;

using MvcViewsDemo.Services;

namespace MvcViewsDemo.Controllers

{

public class GadgetsController : Controller

{

public ActionResult ExchangeRates

{

ViewData["USD"] = ExchangeRatesService.GetRate("USD");

return View;

}

}

}

Использовать

гаджет ExchangeRates можно в любом представлении. Например, при использовании в представлении Index, код которого показан в листинге 5.19, получается результат, приведенный на рис. 5.4.

Листинг 5.19. Представление Index.aspx, использующее гаджет ExchangeRates

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

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

<%@ Import Namespace="Microsoft.Web.Mvc" %>

<%@ 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>

<% Html.RenderAction("ExchangeRates", "Gadgets"); %>

</asp:Content>

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

Примечание

Для того чтобы не добавлять директиву Import в разметку представления, можно подключить пространство имен Microsoft.Web.Mvc для всех файлов проекта в разделе namespaces файла web.config.

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

Удобство

использования гаджетов для независимых блоков на страницах в том, что в процессе развития проекта могут меняться контроллеры, действия и представления, используемые веб-приложением, однако код независимых блоков легко может быть перенесен на другие страницы и модифицирован, просто лишь перестановкой вызова Html.RenderAction. Кроме того, появляется дополнительная степень свободы в модификации самих гаджетов без необходимости затрагивать код основных контроллеров и представлений. Например, код гаджета может быть доработан так, как показано в листингах 5.20, 5.21, чтобы получить результат, представленный на рис. 5.5.

Листинг 5.20. Доработанное частичное представление ExchangeRates

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

<table style="border: solid 2px red; margin: 10px;">

<% foreach (var rate in (Dictionary<string, double>)ViewData["rates"])

{ %>

<tr>

<td>

1

<%= rate.Key %>

</td>

<td>

<%= rate.Value %> RUB

</td>

</tr>

<% } %>

</table>

Листинг 5.21. Доработанный контроллер Gadgets

using System.Web.Mvc;

using MvcViewsDemo.Services;

using System. Collections.Generic;

namespace MvcViewsDemo.Controllers

{

public class GadgetsController : Controller

{

public ActionResult ExchangeRates

{

Dictionary<string, double> rates =

new Dictionary<string, double>;

rates.Add("USD", ExchangeRatesService.GetRate("USD"));

rates.Add("EUR", ExchangeRatesService.GetRate("EUR"));

ViewData["Rates"] = rates;

return View;

}

}

}

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

Заключение

Материала, представленного в главах 1—5, достаточно для того, чтобы начать создавать базовые веб-приложения с использованием MVC Framework. В следующих главах вы познакомитесь ближе с механизмами маршрутизации и разработкой клиентской части веб-приложений и будете готовы к разработке веб-приложений любой сложности.

ГЛАВА 6

Механизмы маршрутизации

Поделиться:
Популярные книги

Эволюционер из трущоб

Панарин Антон
1. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб

В.А. Жуковский в воспоминаниях современников

Коллектив авторов
Серия литературных мемуаров
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
В.А. Жуковский в воспоминаниях современников

Фантастические рассказы из журнала «Вокруг света»

Михеев Михаил Петрович
Фантастика:
научная фантастика
5.00
рейтинг книги
Фантастические рассказы из журнала «Вокруг света»

Энциклопедия философских наук. Часть первая. Логика

Гегель Георг Вильгельм Фридрих
1. Собрание сочинений в 14 томах
Научно-образовательная:
философия
5.00
рейтинг книги
Энциклопедия философских наук. Часть первая. Логика

"Фантастика 2023-134". Компиляция. Книги 1-22

Демина Карина
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Фантастика 2023-134. Компиляция. Книги 1-22

"Фантастика 2025-70". Компиляция. Книги 1-31

Волков Николай Владимирович
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-70. Компиляция. Книги 1-31

Неучтенный элемент. Том 7

NikL
7. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 7

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.67
рейтинг книги
Паладин из прошлого тысячелетия

Скрытая Империя

Андерсон Кевин Джей
1. Сага Семи Солнц
Фантастика:
научная фантастика
6.25
рейтинг книги
Скрытая Империя

Фантастика. Путеводитель

Weeldoon
Справочная литература:
руководства
5.00
рейтинг книги
Фантастика. Путеводитель

Мир Приключений 1963 г. №9

Днепров Анатолий
Альманах "Мир приключений"
Фантастика:
научная фантастика
5.00
рейтинг книги
Мир Приключений 1963 г. №9

Хроника

Саксон Анналист
Mediaevalia: средневековые литературные памятники и источники
Научно-образовательная:
история
5.00
рейтинг книги
Хроника

Том 1. Повести, рассказы, стихи 1892-1894

Горький Максим
1. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 1. Повести, рассказы, стихи 1892-1894

Барон Серж де Сангре

Назипов Ринат
Вселенная EVE Online
Фантастика:
боевая фантастика
7.65
рейтинг книги
Барон Серж де Сангре