Гайдар Магдануров - ASP.NET MVC Framework
- Название:ASP.NET MVC Framework
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2010
- Город:Санкт-Петербург
- ISBN:978-5-9775-0462-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Гайдар Магдануров - ASP.NET MVC Framework краткое содержание
Описаны модель и доступ к данным (технологии LINQ, Entity Framework и др.), контроллеры, представление и интерфейс приложения, механизмы маршрутизации и Ajax-функциональность. Уделено внимание вопросам тестирования веб-приложений. Рассмотрены особенности применения ASP.NET MVC 2 в Visual Studio 2010.
Для программистов
ASP.NET MVC Framework - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Данные для отображения и ViewData
В главе 1 кратко был описан механизм передачи данных от контроллера представлению. Поскольку основной задачей представления является отображение данных, мы подробно остановимся на этой теме.
ViewData
— это класс типа viewDataDictionary
, из названия типа которого очевидно, что ViewData
представляет собой коллекцию типа ключ-значения, называемую словарем.
public class ViewDataDictionary : IDictionary {}
Поскольку ViewData
является коллекцией доступных по строковому ключу объектов, в ней может быть сохранено произвольное количество объектов разных типов.
public ActionResult ViewDataDemo()
{
ViewData.Add("Hello", "World");
ViewData["Date"] = DateTime.Now;
return View();
}
Объекты, содержащиеся в коллекции ViewData
, в свою очередь, могут быть использованы в разметке представления.
Строгая типизация данных представления
Работа с произвольным набором элементов удобна, когда набор данных, отображаемых представлением, меняется в процессе развития проекта. Однако в случаях, когда все данные представления могут быть описаны одним классом, значительно удобнее использовать строго типизированные представления. Для этого коллекция ViewData
предоставляет свойство ViewData.Model
и возможность строгой типизации представления путем наследования самого класса представления от класса ViewPage.
В листинге 5.4 представлена разметка строго типизированного представления.
Листинг 5.4. Представление ViewDataModelStronglyTyped.aspx
ViewDataModelStronglyTyped
ViewDataModelStronglyTyped
Fields
CompanyName:
ContactName:
ContactTitle:
Address:
С точки зрения контроллера, для работы со строго типизированным представлением достаточно присвоить объект свойству 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
используется внутренней инфраструктурой MVC Framework для связывания данных с полями ввода и вывода информации о проверке корректности данных, о чем подробнее будет рассказано далее в этой главе вразд. "Валидация данных форм”.
Генерация разметки представлением
Для создания логики генерации представления в MVC Framework используются несколько подходов.
□ Вложенный управляющий код. Логика отображения данных описывается непосредственно внутри файла разметки ASPX с использованием стандартного синтаксиса для управляющих конструкций и синтаксиса для вывода строковых значений непосредственно в результирующий код разметки.
□ Вспомогательные методы для генерации разметки. Вспомогательные методы позволяют многократно использовать фрагменты логики генерации представления и представляют собой вызовы некоторых методов, возвращающих строки. В библиотеке MVC Framework существует большой набор готовых вспомогательных методов, представленных как методы-расширения для классов Html, Url, Ajax, однако в качестве вспомогательного метода может быть использован любой метод, возвращающий строковое значение.
□ Серверные элементы управления. Несмотря на отсутствие возможности использования событийной модели, серверные элементы управления ASP.NET по-прежнему могут быть использованы для декларативного отображения данных.
На самом деле в приведенном ранее списке присутствует немного лукавства, поскольку, по большому счету, генерация представлений в конечном итоге основывается на создании компилируемого управляющего кода.
Рассмотрим каждый из подходов подробно на практическом примере, и по мере изложения материала будем создавать работающее демонстрационное приложение, использующее разобранные ранее возможности.
Читать дальшеИнтервал:
Закладка: