Представления

Содержание

Слайд 2

План Модель представления Макеты страниц Частичные представления Вспомогательные методы в шаблонах представлений Пользовательские вспомогательные методы

План

Модель представления
Макеты страниц
Частичные представления
Вспомогательные методы в шаблонах представлений
Пользовательские вспомогательные методы

Слайд 3

Модель представления Способы обмена данными между контроллером и представлением: ViewData: ViewDataDictionary

Модель представления

Способы обмена данными между контроллером и представлением:
ViewData: ViewDataDictionary
ViewData.Model
ViwBag: dynamic

Модель представления

– это данные, структура которых воспроизводит структуру представления.
Слайд 4

Пример модели представления @using ArtMuseum.Models @model LoginModel … @Model.UserName public class

Пример модели представления

@using ArtMuseum.Models
@model LoginModel

@Model.UserName


…>





public class LoginModel
{
public string UserName { get; set; }
public string Password { get; set; }
public bool RememberMe { get; set; }
}

В типизированном представлении тип модели объявляется директивой @model.
Сам объект модели доступен через свойство представления Model.

Пространство имен можно указать в директиве @using или в файле web.config в папке Views.

Модель представления для аутентификации пользователя.

Слайд 5

Макеты страниц Два представления могут находиться в отношении макет – содержимое (мастер-страница – содержимое).

Макеты страниц

Два представления могут находиться в отношении макет – содержимое (мастер-страница

– содержимое).
Слайд 6

Пример Макет Страница

Пример

Макет

Страница

Слайд 7

Секции В макете можно предусмотреть не одно, а несколько мест для

Секции

В макете можно предусмотреть не одно, а несколько мест для вставки

содержимого. Эти места отмечаются кодом
@RenderSection(имя_секции, обязательность)
На странице вставляемое содержимое размещается в секциях.
@section имя_секции{ ………………. }
Слайд 8

Неявное указание макета @{ Layout = "~/Views/Shared/_AdminLayout.cshtml"; } Содержание _ViewStart.cshtml: Обычно

Неявное указание макета

@{
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}

Содержание _ViewStart.cshtml:

Обычно несколько представлений одного

контроллера пользуются общим макетом. Его можно указать опосредованно в файле _ViewStart.cshtml, который находится в корневом каталоге представлений.
Слайд 9

Частичные представления @Html.Partial("PicturePartial", new ArtMuseum.Models.Picture { Name = «Богатырская застава" })

Частичные представления

@Html.Partial("PicturePartial", new ArtMuseum.Models.Picture { Name = «Богатырская застава" })

Вызов на

странице:

Имя представления

Объект модели

Функционально частичное представление аналогично User Control.
По умолчанию ч.п. создается в папке ~/Views/Shared.
Макет в ч.п. не указывается.

Слайд 10

Вспомогательные методы 1: Html.TextBox("Name") // MVC 2.0 2: Html.TextBoxFor(m => m.Name)

Вспомогательные методы

1:  Html.TextBox("Name") // MVC 2.0
2:  Html.TextBoxFor(m => m.Name) // MVC

3.0

Вспомогательные методы (helpers – помощники) вызываются из шаблонов страниц и возвращают html-код.
Вспомогательные методы расширяют тип HtmlHelper. Представления имеют свойство Html типа HtmlHelper,через которое можно получить доступ к любым помощникам.
Код помощников содержится в классе System.Web.Mvc.Html в форме статических методов.

Оба помощника возвращают одну и ту же строку:

Параметром помощника может быть строка (как в MVC 2.0)
или делегат (как в MVC 3.0).
Делегат позволяет выполнить ранний контроль типа.

Слайд 11

Значения элементов управления При синтезе страницы значения элементов управления черпаются из

Значения элементов управления

При синтезе страницы значения элементов управления черпаются из двух

источников:
коллекция ViewData.ModelState;
параметра метода-помощника.

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

@Html.TextBoxFor(model => model.Name)

Слайд 12

Атрибуты элемента управления Любые дополнительные атрибуты элемента управления можно задать в

Атрибуты элемента управления

Любые дополнительные атрибуты элемента управления можно задать в виде

параметра помощника типа object.

@Html.TextBoxFor(model => model.Name, "--=={0}==--", new { id = model.Id })

строка формата

дополнительные атрибуты

Слайд 13

Формы @{Html.BeginForm("Search", "Home", FormMethod.Get, new { target = "_blank", class="editForm", data_validatable=true

Формы

@{Html.BeginForm("Search", "Home", FormMethod.Get, new { target = "_blank",
class="editForm", data_validatable=true

} }


@{Html.EndForm();}

@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target = "_blank",
class="editForm", data_validatable=true }))
{


}




Есть два способа сгенерировать код формы. Во втором способе закрывающий тэг создается методом Dispose().

Слайд 14

Перегруженные помощники public static class LabelExtensions { 1 public static MvcHtmlString

Перегруженные помощники

public static class LabelExtensions
{
1 public static MvcHtmlString Label(this HtmlHelper html,

string expression);
2 public static MvcHtmlString Label(this HtmlHelper html, string expression,
object htmlAttributes);
3 public static MvcHtmlString Label(this HtmlHelper html, string expression,
string labelText, object htmlAttributes);
4 public static MvcHtmlString LabelFor(this HtmlHelper html,
Expression> expression);
}

1:  Html.Label("Author") // MVC 2.0
4:  Html.LabelFor(m => m.Author) // MVC 3.0

Слайд 15

Популярные помощники

Популярные помощники

Слайд 16

Интегральные помощники Edit @using (Html.BeginForm("Edit", "Home")) { @Html.EditorForModel() Submit } В

Интегральные помощники

Edit


@using (Html.BeginForm("Edit", "Home"))
{
@Html.EditorForModel()

}

В связи с автоматической генерацией

шаблонов в MVC появились крупнопанельные конструкции вроде EditorForModel() или DisplayForModel().
Они годны лишь для временного употребления, когда надо быстро получить прототип, например.
Слайд 17

Объявление собственных помощников В качестве примера объявим помощник для генерации ссылки

Объявление собственных помощников

В качестве примера объявим помощник для генерации ссылки с

подтверждением.
Ссылка с подтверждением – это такая ссылка, что если по ней кликнуть, в браузере появится диалоговое окно с двумя кнопками и сообщением message. Переход по url произойдет, если нажать кнопку OK. Параметр text - текст ссылки.

namespace HelpersMVC.Views.Shared
{
public static class MyHelpers
{
public static MvcHtmlString ConfirmingLink(
this HtmlHelper helper,
string url, string text, string prompt = "Really?")
{
text = HttpUtility.HtmlEncode(text);
string html = string.Format(
"{2}",
url, prompt, text);
return MvcHtmlString.Create(html);
}
}
}

Слайд 18

Вызов помощника @using HelpersMVC.Views.Shared @Html.ConfirmingLink("https://www.google.com.ua/", "Go to Google?") Пространство имен самодельного

Вызов помощника

@using HelpersMVC.Views.Shared
@Html.ConfirmingLink("https://www.google.com.ua/", "Go to Google?")

Пространство имен самодельного помощника

импортируем при помощи директивы @using
Импорт пространства имен для всех шаблонов некоторой папки можно сделать в локальном файле web.config.
          .   .      
Слайд 19

Помощники Razor Генерировать html-код естественней и проще при помощи шаблонов Razor.

Помощники Razor

Генерировать html-код естественней и проще при помощи шаблонов Razor.
Для этого

каталоге App_Code разместим файл MyHelpers.cshtml

n

@using System.Web.Mvc.Html
@using System.Web.Mvc
@helper ConfirmingLink(string url, string text, string message="Really?")
{
@text
}

Вызываются помощники Razor без указания пространства имен.

@MyHelpers.ConfirmingLink("https://www.google.com.ua/", "Go to Google?")