Введение в ASP.NET MVC

Содержание

Слайд 2

История ASP.NET 1996 – ASP – Active Server Pages, построение страниц

История ASP.NET

1996 – ASP – Active Server Pages, построение страниц на

сервере на основе шаблонов. Шаблоны сочетали код на VB c HTML-разметкой.
2001 – ASP.NET – Составная часть новой платформы .NET. Технология WebForms, по аналогии с WinForms.
2009 – ASP.NET MVC. Аналогична уже существующим на рынке подходам: Java Spring 2002, Python Jango 2003 и др.
2013 – ASP.NET MVC 5.0 – октябрь, последняя версия

ASP.NET

WebForms

ASP.NET

WebForms

MVC

ASP

Слайд 3

Фреймворки на базе ASP.NET ASP.NET – бесплатный фреймворк для построения больших

Фреймворки на базе ASP.NET

ASP.NET – бесплатный фреймворк для построения больших веб-приложений

с использованием HTML, CSS и JavaScript. 
WebForms – технология построение веб-приложений из стандартных управляющих элементов и обработчиков событий.
ASP.NET MVC – построение веб-приложений на базе шаблона MVC с разделением ответственности и полным контролем над HTML кодом страниц.
Web Pages – быстрая разработка веб-сайтов согласно современным веб-стандартам.
Слайд 4

План Введение в ASP.NET MVC Движок Razor Модели Доступ к данным

План

Введение в ASP.NET MVC
Движок Razor
Модели
Доступ к данным
Контроллеры
Представления
Валидация ввода
Аутентификация и авторизация
Модульное

тестирование
jQuery
AJAX
Слайд 5

Литература по ASP.NET MVC Jon Galloway, Phil Haack, Brad Wilson, K.

Литература по ASP.NET MVC

Jon Galloway, Phil Haack, Brad Wilson, K. Scott

Allen PROFESSIONAL ASP.NET MVC 3 (здесь перевод на русский)
Стивен Сандерсон ASP.NET MVC Framework с примерами на C# для профессионалов
Jeffrey Palermo, Jimmy Bogard, Eric Hexter, Matthew Hinze, and Jeremy Skinner ASP.NET MVC 4 in Action (есть на русском)
Слайд 6

Цель занятия Познакомиться с архитектурой WEB приложения. Вспомнить шаблон MVC. Написать приложение Hello ASP.NET MVC!

Цель занятия

Познакомиться с архитектурой WEB приложения.
Вспомнить шаблон MVC.
Написать приложение

Hello ASP.NET MVC!
Слайд 7

WEB-приложение на платформе ASP.NET WEB server WEB client GET, POST HTML

WEB-приложение на платформе ASP.NET
WEB server
WEB client

GET, POST

HTML
ASP.NET
WEB application

WEB application

– виртуальный каталог на сервере. Поэтому путь к ресурсу не обязан быть путем в файловой системе.
Слайд 8

Протокол HTTP HTTP — протокол прикладного уровня, аналогичными ему являются FTP

Протокол HTTP

HTTP — протокол прикладного уровня, аналогичными ему являются FTP и SMTP. Обмен сообщениями идёт по

обыкновенной схеме «запрос-ответ». Для идентификации ресурсов HTTP использует глобальные URI. В отличие от многих других протоколов, HTTP не сохраняет своего состояния. 

Тим Бернерс-Ли, изобретатель URI, URL, HTTP, HTML и Web

GET, POST

GET, POST

Слайд 9

Примеры запроса и ответа GET /simple.html HTTP/1.1 Accept: */* Accept-Language: en-us

Примеры запроса и ответа

GET /simple.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 24 Oct 2011 14:12:36 GMT
User-Agent: Mozilla/4.0.(compatible; MSIE.6.0; Windows NT 5.1)
Host: www.wintellect.com
Connection: Keep-Alive
[blank line]

http://www.wintellect.com/simple.html

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 24 Oct 2011 14:12:37 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Wed, 24 Oct 2001 14:00:53 GMT
Content-Length: 46


Hello, world


Увидеть заголовки можно в окне

разработчика браузера Chrome [F12, F5, Network, Headers].
Слайд 10

Шаблон MVC Концепция MVC была описана в 1979 г. Трюгве Реенскаугом,

Шаблон MVC

Концепция MVC была описана в 1979 г. Трюгве Реенскаугом, тогда работающим

над языком программирования Smalltalk в Xerox PARC. 

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

Слайд 11

Шаблон MVC для Web M – классы, которые представляют данные приложения

Шаблон MVC для Web

M – классы, которые представляют данные приложения

и бизнес-правила, которым должны удовлетворять эти данные
V – файлы шаблонов, по которым генерируется динамический HTML-ответ
C – классы, которые обрабатывают запросы пользователя, получают данные от модели и выбирают представление для формирования ответа пользователю
Слайд 12

Приложение Hello MVC! Создать проект ASP.NET MVC 4, вид проекта –

Приложение Hello MVC!

Создать проект ASP.NET MVC 4, вид проекта – пустой

(Empty).
Добавить HomeController, который передаст в представление слова "Hello MVC!"
Создать представление, которое получит от контроллера слова "Hello MVC!" и покажет их на странице.
Слайд 13

Траектория запроса Маршрутизатор Запрос Метод контроллера Шаблон представления Ответ "Hello MVC!"

Траектория запроса

Маршрутизатор

Запрос

Метод контроллера

Шаблон представления

Ответ

"Hello MVC!"

Слайд 14

Маршрутизатор namespace MvcApplication4 { public class RouteConfig { public static void

Маршрутизатор

namespace MvcApplication4
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)

{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
}
}

В файле ~/App_Start/RouteConfig.cs корректируется таблица маршрутов.
Эта коррекция означает, что запрос "сервер/приложение/С/M/" вызовет метод M класса C,
а запрос "сервер/приложение/" вызовет метод Index класса Home.
Шаблон маршрута содержит текст «как есть» и параметры. Имена параметров заключены в фигурные скобки.

Слайд 15

Контроллер public class HomeController : Controller { public ActionResult Index() {

Контроллер

public class HomeController : Controller
{
public ActionResult Index()

{
ViewBag.Info = "Hello MVC!";
return View();
}
}

В файле ~/Controllers/HomeController.cs находится класс контроллера.
Открытые методы контроллера вызываются по http-запросу.
Возвращаемое значение метода ссылается на шаблон представления. По умолчанию дается ссылка на представление, одноименное с методом.
Данные, которые нужно показать, закладываются в динамический объект ViewBag.

Слайд 16

Представление @ViewBag.Info В файле ~/Views/Home/Index.cshtml находится шаблон представления (Home – класс

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

@ViewBag.Info


В файле ~/Views/Home/Index.cshtml находится шаблон представления (Home – класс контроллера, Index

– метод контроллера).
Данные, которые передал контроллер, извлекаются из динамического объекта ViewBag.
Данные вставляются в шаблон страницы с использованием нотации Razor.
Слайд 17

Реализовать диалог Сервер: Назовите свое имя. Клиент: Вася. Сервер: Привет, Вася.

Реализовать диалог

Сервер: Назовите свое имя.
Клиент: Вася.
Сервер: Привет, Вася.

Назовите свое имя.

Вася

Привет, Вася.

Готово

Вид

веб-формы

текст

поле ввода

кнопка

текст

Слайд 18

Реализация диалога Одна страница вызывается дважды – первый раз из адресной

Реализация диалога

Одна страница вызывается дважды
– первый раз из адресной строки

браузера по команде GET,
– второй раз по нажатию кнопки, команда POST.
Запрос POST передает на сервер данные формы (содержимое поля ввода).
Методы контроллера нужно промаркировать атрибутом HttpGet или HttpPost.

Форма

Слайд 19

Извлечение параметров запроса Команды GET и POST могут иметь именованные параметры.

Извлечение параметров запроса

Команды GET и POST могут иметь именованные параметры.
Параметры

команд должны быть переданы в соответствующие методы контроллера.
Есть два способа это сделать:
объявить одноименные параметры в соответствующем методе контроллера;

public ActionResult Index(string username = "")
{
ViewBag.UserName = username;
return View();
}

public ActionResult Index()
{
ViewBag.UserName = this.RouteData.Values["username"];
return View();
}

2) воспользоваться объектом RouteData, который содержит данные запроса в виде словаря.