Asp.net mvc framework
Шрифт:
Листинг 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;
}
}
}
Использовать
Листинг 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.
*********************
Удобство
Листинг 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. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
В.А. Жуковский в воспоминаниях современников
Серия литературных мемуаров
Документальная литература:
биографии и мемуары
рейтинг книги