ЖАНРЫ

Шрифт:

Приятное отличие разработки единичного проекта на базе областей от решения с несколькими проектами-областями состоит в том, что при создании одиночного проекта ASP.NET MVC на базе областей нет необходимости изменять его файл проекта, т. к. нет нужды обрабатывать зависимости между проектами. В целом, это несколько упрощает создание решения с областями.

Функционал

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

Шаблонные помощники

Шаблонные помощники (templated helpers) — это новое средство в MVC 2, которое призвано сократить время разработки представлений. Шаблонные помощники строго типизированы и основаны на моделях приложения, кроме того, для вывода информации и валидации модели используется механизм DataAnnotations. В общем, шаблонных помощников можно представить себе как генератор разметки на базе определенной модели и правил, указанных с помощью атрибутов DataAnnotations.

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

Для примера рассмотрим следующую модель данных:

public class Product

{

public int Id { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public decimal Cost { get; set; }

public DateTime UpdatedAt { get; set; }

}

Класс Product представляет собой модель продукта для некого магазина. Модель содержит идентификатор, название, описание, стоимость и дату обновления.

Механизм шаблонных помощников устроен так, что позволяет отображать разметку для модели всего одной строчкой кода. Например, создадим контроллер StoreController и строготипизированное представление Info, основанное на Product, которое отображает информацию о продукте (листинг 9.2).

Листинг 9.2. Представление с использованием шаблонных помощников

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

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

Inherits="System.Web.Mvc.ViewPage<TemplatedHelpersProject.Models.Product> " %>

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

runat="server">

Информация о продукте

</asp:Content>

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

runat="server">

<h2>Info</h2>

<%= Html.DisplayFor(x => Model)%>

</asp:Content>

Обратите внимание на выделенный участок

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

Код контроллера StoreController для примера будет таким, как в листинге 9.3.

Листинг 9.3. Контроллер StoreController

namespace TemplatedHelpersProject.Controllers

{

using System;

using System.Web.Mvc;

using TemplatedHelpersProj ect.Models;

public class StoreController : Controller

{

public ActionResult Info

{

var product = new Product { Cost = 1,

Description = "Описание",

Id = 1, Name = "Товар",

UpdatedAt = DateTime.Now };

return View(product);

}

}

}

Запустим приложение на выполнение и перейдем на представление Store/Info. Результатом будет полная информация, заведенная нами в экземпляре Product (рис. 9.6).

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

Шаблоны по умолчанию

Для работы с шаблонами по умолчанию ASP.NET MVC предлагает несколько стандартных методов расширения:

? Html.LabelFor — производит рендеринг описательной информации для данных модели. По умолчанию выводит название поля модели;

? Html.DisplayFor — производит рендеринг значений данных модели в соответствии с их типом;

? Html.EditorFor — производит рендеринг элементов управления с данными модели для возможности редактирования.

Примечание

Кроме перечисленных стандартных методов расширения, в будущем планируется добавить методы: ValidationMessageFor, TextAreaFor, TextBoxFor, HiddenFor, DropDownListFor для соответствующей поддержки валидации и элементов управления в различных представлениях.

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

Для всех этих методов расширения есть дополнительные методы LabelForModel, DisplayForModel и EditorForModel, которые являются сокращенным вариантом своих аналогов. Эти методы предназначены для рендеринга всей модели данных целиком без указания параметров.

Рассмотрим вариант рендеринга модели с помощью стандартных методов расширения. Для этого сформируем следующее представление (листинг 9.4).

Листинг 9.4. Модифицированное представление

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

Inherits="System.Web.Mvc.ViewPage<TemplatedHelpersProj ect.Models.Product> " %>

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

runat="server">

Info

</asp:Content>

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

runat="server">

<div>

<fieldset>

<legend>Информация</legend>

Поделиться с друзьями: