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

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

Жанры

Шрифт:

Листинг 5.4. Представление ViewDataModelStronglyTyped.aspx

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

Inherits="System.Web.Mvc.ViewPage<MvcViewsDemo.Models.Customer>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

ViewDataModelStronglyTyped

</asp:Content>

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

<h2>

ViewDataModelStronglyTyped

</h2>

<fieldset>

<legend>Fields</legend>

CompanyName:

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

ContactName:

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

ContactTitle:

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

Address:

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

</fieldset>

</asp:Content>

С

точки зрения контроллера, для работы со строго типизированным представлением достаточно присвоить объект свойству ViewData.Model либо передать объект в качестве параметра методу View .

public ActionResult ViewDataModelStronglyTyped

{

NorthwindDatabase db = new NorthwindDatabase;

return View(db.GetCustomers.First);

}

В случае нестрого типизированного представления объект также может быть передан в свойство ViewData.Model, однако это не имеет практической пользы, поскольку на стороне представления все равно придется выполнять приведение типов для свойств этого объекта.

Преимущества строго типизированного представления очевидны — поддержка подсказки IntelliSense при разработке представлений в Visual Studio, возможность генерации заготовок представлений средствами Visual Studio, как это было выполнено для представления, приведенного в листинге 5.4.

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

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

Поиск элементов в коллекции ViewData

Легко представить себе ситуацию, в которой на стороне представления заранее не определено, где находятся данные — в коллекции viewData или же в свойствах объекта viewData.Model. Для поиска этого элемента доступен специальный метод viewData.Eval, осуществляющий поиск в коллекции элементов и в свойствах объекта модели, при этом поддерживается синтаксис точки (.) между именами свойств объектов.

Например, в представлении используется метод viewData.Eval("customer. lastname"), тогда будет выполнен поиск

элемента по описанному далее алгоритму.

1. Будет проверено наличие значения ViewData["customer. lastname"].

2. Если значение отсутствует для приведенного ранее элемента коллекции, то будет осуществлен поиск элемента ViewData["customer"] .

3. В случае если элемент найдет по ключу "customer", то будет осуществлена попытка получить значение ViewData["customer"].lastname, если же такого свойства у объекта, содержащегося под ключом "customer", найдено не будет, будет осуществлена попытка найти элемент вложенной коллекции ViewData["customer"]["lastname"].

4. В случае провала предыдущих попыток поиска будут проверены свойства объекта Model: ViewData.Model.customer.lastname и ViewData.Model.customer["lastname"].

Описанный ранее метод поиска приводит к нескольким выводам — при поиске элементы коллекции viewData имеют приоритет над свойствами объекта, передаваемого через свойство в Model, поэтому следует не допускать совпадения именований свойств объекта, передаваемого через Model и элементов коллекции ViewData.

Использование метода viewData.Eval несет в себе также и возможность передавать строку для форматирования вывода данных.

<%= ViewData.Eval("customer.regDate", "Клиент с {0:yyyy} года.") %>

Метод viewData используется внутренней инфраструктурой MVC Framework для связывания данных с полями ввода и вывода информации о проверке корректности данных, о чем подробнее будет рассказано далее в этой главе вразд. "Валидация данных форм”.

Генерация разметки представлением

Для создания логики генерации представления в MVC Framework используются несколько подходов.

? Вложенный управляющий код. Логика отображения данных описывается непосредственно внутри файла разметки ASPX с использованием стандартного синтаксиса <% %> для управляющих конструкций и синтаксиса <%= %> для вывода строковых значений непосредственно в результирующий код разметки.

? Вспомогательные методы для генерации разметки. Вспомогательные методы позволяют многократно использовать фрагменты логики генерации представления и представляют собой вызовы некоторых методов, возвращающих строки. В библиотеке MVC Framework существует большой набор готовых вспомогательных методов, представленных как методы-расширения для классов Html, Url, Ajax, однако в качестве вспомогательного метода может быть использован любой метод, возвращающий строковое значение.

? Серверные элементы управления. Несмотря на отсутствие возможности использования событийной модели, серверные элементы управления ASP.NET по-прежнему могут быть использованы для декларативного отображения данных.

Примечание

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

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

Двадцать и двадцать один. Наивность

Das_Leben
Детективы:
триллеры
5.00
рейтинг книги
Двадцать и двадцать один. Наивность

Елизавета Петровна

Сахаров Андрей Николаевич
11. Романовы. Династия в романах
Проза:
историческая проза
5.50
рейтинг книги
Елизавета Петровна

Егерь. Вызов

Скиба Николай
3. Зверолов
Фантастика:
боевая фантастика
рпг
уся
фэнтези
попаданцы
6.00
рейтинг книги
Егерь. Вызов

Том 1. Романы. Рассказы. Критика

Газданов Гайто
1. Собрание сочинений в пяти томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 1. Романы. Рассказы. Критика

Война и мир. Первый вариант романа

Толстой Лев Николаевич
Проза:
русская классическая проза
5.25
рейтинг книги
Война и мир. Первый вариант романа

Волхв

Фаулз Джон Роберт
Проза:
современная проза
8.14
рейтинг книги
Волхв

В осаде

Кетлинская Вера Казимировна
Проза:
военная проза
советская классическая проза
5.00
рейтинг книги
В осаде

Всё о современной рыбалке. Полная энциклопедия

Горяйнов Алексей Георгиевич
Дом и Семья:
хобби и ремесла
5.00
рейтинг книги
Всё о современной рыбалке. Полная энциклопедия

Король планеты Зима (сборник)

Ле Гуин Урсула Кребер
9. Вся Ле Гуин
Фантастика:
фэнтези
8.42
рейтинг книги
Король планеты Зима (сборник)

Засеянные звезды. Сборник фантастических романов

Блиш Джеймс Бенджамин
13. «Клуб Любителей Фантастики»
Фантастика:
научная фантастика
6.25
рейтинг книги
Засеянные звезды. Сборник фантастических романов

Особый склад ума

Катценбах Джон
Детективы:
триллеры
7.33
рейтинг книги
Особый склад ума

Золушка (сборник)

Макбейн Эд
Мастера остросюжетного романа
Детективы:
полицейские детективы
5.00
рейтинг книги
Золушка (сборник)

Свет погасших звезд. Люди, которые всегда с нами

Раззаков Федор Ибатович
2. Свет погасших звезд
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Свет погасших звезд. Люди, которые всегда с нами

Бояръ-Аниме. Газлайтер. Том 32

Володин Григорий Григорьевич
32. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 32