- •Модель приложения
- •Цель
- •Траектория запроса
- •Подпи
- •Состав приложения
- •Модель: классы ChatItem и
- •Модель представления
- •Контроллер
- •Типизированное
- •Шаблон представления
- •Проверка ввода
- •интерфейс IValidatableObject
- •контроллере
- •Bundling & Minification
- •Программный код в шаблонах представления
- •Движок Razor
- •Границы разметки и кода
- •Сложные выражения
- •Многострочные
- •Блоки @if и @foreach
- •Интеграция содержимого и кода
- •Обертывание в тэги
- •Кодирование HTML
- •Самостоятельно
Модель приложения
ASP.NET MVC 4.0
2013
Цель
•Применить модель при разработке приложений
•Научиться использовать движок Razor в шаблонах страниц
2
Траектория запроса
|
Метод |
Запрос к |
Модель |
GET, POST |
контроллера |
модели |
|
|
|
|
|
|
|
|
|
|
|
Данные, |
|
|
|
|
которые |
|
|
|
|
нужно |
|
Выводим не |
|
|
показать |
|
|
|
|
|
|
"Hello" а |
|
|
Шаблон |
||
|
|
погоду. |
||
HTML |
представлен |
|||
|
|
ия |
|
Модель – система классов (описание предметной области).
Запрос к модели – вызов метода одного из классов модели.
Модель представления – данные, которые нужно 3 показать
Подпи
сь
Задача: Сделать чат
Макет страницы
Проток ол чата
Новое
сообщен
ие
Кноп
ка
4
Состав приложения
5
Модель: классы ChatItem и
Chat
public class ChatItem
{
public string Message { set; get; } public string Author { set; get; } public DateTime Time { set; get; }
}
public static class Chat
{
public static List<ChatItem> list = new List<ChatItem>();
static object _objLock = new Object();
public static void AddItem(ChatItem item)
{
if (string.IsNullOrWhiteSpace(item.Author)) item.Author = "Anonimus";
item.Time = DateTime.Now;
lock (_objLock)
{
list.Add(item);
}
}
}
6
Модель представления
public class VModel
{
public List<ChatItem> All { set;
get; }
public string Message { set; get; } public string Author { set; get; }
}
Модель представления должна близко соответствовать структуре представления.
7
Контроллер
Уконтроллера две задачи:
1)по команде GET показать первоначальный вид страницы;
2)по команде POST добавить сообщение в протокол и снова показать страницу.
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
// Показать страницу
VModel vm = new VModel { All = Chat.list, Author = "" }; return View(vm);
}
[HttpPost]
public ActionResult Index(ChatItem item)
{
//Добавить сообщение в протокол if (ModelState.IsValid)
Chat.AddItem(item);
//Показать страницу
VModel vm = new VModel { All = Chat.list, Author = item.Author };
return View(vm);
}
}
8
Типизированное
представление
Шаблон типизированного представления строится с учетом типа модели представления.
Состав типа определяется при помощи отражения.
Если выбрать опцию Empty никакого специального кода построено не будет.
@model ChatMVC.Models.VModel @{
ViewBag.Title = "Index";
}
<h2>Index</h2>
Типизация представления выразится только в появлении в шаблоне свойства Model.
9
Шаблон представления
@model ChatMVC.Models.VModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Chat MVC</h2> <div id="chat">
@foreach (var item in Model.All)
{
<section class='message'>
<span class='author'>@item.Author: </span> @item.Message
<br />
<span class='time'>@item.Time</span> </section>
}
</div>
<form method="post" action="/Home/Index"> @Html.ValidationSummary() Сообщение:<br/>
<textarea id="message" name="message" ></textarea> <br/>
Подпись: <input type="text" id="author" name="author" value="@Model.Author"/>
<input type="submit" value="Submit"/> <br/> </form>
Директива @model позволяет получать подсказки во время разработки. Во время выполнения она роли не играет.
10