Slide 1

Slide 1 text

KznDotNet Meetup #1 Razor Pages: New page-based framework in ASP.NET Core Ладохин Станислав Ведущий .NET разработчик, ICL

Slide 2

Slide 2 text

ASP.NET Web Application Templates MVC – рекомендуемый и выбираемый по умолчанию шаблон проекта

Slide 3

Slide 3 text

ASP.NET MVC. Недостатки • Большое количество файлов и папок • Сложная маршрутизация • Бесконечно разрастающиеся классы контроллеров • Небольшие изменения в рамках одного компонента могут затронуть большое количество файлов • Трудности в реализации «page-based» сценариев (статичные представления, CRUD, POST- Redirect-GET)

Slide 4

Slide 4 text

«Community requests» https://github.com/aspnet/Mvc/issues/494

Slide 5

Slide 5 text

ASP.NET Team goals Non-goals: • Create a scripted page framework to compete with PHP, etc. • Hide C# with a DSL in Razor or otherwise • New primitives should be usable in traditionally structured MVC apps too

Slide 6

Slide 6 text

ASP.NET Core Web Application Templates ASP.NET Core Razor Pages (Web Application) – рекомендуемый и выбираемый по умолчанию шаблон проекта

Slide 7

Slide 7 text

Структура приложения Razor Pages • Project file (*.csproj) • Dependencies • Configuration files: - launchSettings.json - appSettings.json - bundleconfig.json • «wwwroot» (static files) • Program.cs • Startup.cs • Pages folder

Slide 8

Slide 8 text

Dependencies • Analyzers • Assemblies • Projects • NuGet packages • SDK

Slide 9

Slide 9 text

Configuration files. «launchSettings.json»

Slide 10

Slide 10 text

Configuration files. «appSettings.json»

Slide 11

Slide 11 text

Configuration files. «bundleconfig.json»

Slide 12

Slide 12 text

Static files («wwwroot») После ее включения запросы такого вида будут перенаправляться в «wwwroot» Например: http:///css/site.css -> /wwwroot/css/site.css Для включения «фичи» необходимо вызвать «app.UseStaticFiles()» в классе «Startup.cs»

Slide 13

Slide 13 text

Pages folder. Razor Page Признаки того, что перед нами Razor page: • Отсутствует `_` в названии файла • Расширение файла «cshtml» • @page в первой строке файла Page Path (‘/’ - Pages folder) URL /About.cshtml /About /SomeFolder/SomePage.cshtml /SomeFolder/SomePage /Index.cshtml “/Index” OR “/” /SomeFolder/Index.cshtml /SomeFolder/

Slide 14

Slide 14 text

Razor Page with «Page Model» «Index.cshtml» (Razor content Page) «Index.cshtml.cs» (Page Model)

Slide 15

Slide 15 text

Razor Page without «Page Model» «PageWithoutModel.cshtml» (Razor Page without @model directive) Используется внутренняя реализация «PageModel» с «OnGet» обработчиком

Slide 16

Slide 16 text

Startup configuration

Slide 17

Slide 17 text

It is MVC Routing • Model Validation • Action Descriptors • Action Results • Filters • Model Binding • Value Providers • Layout & Partials • HTML Helpers • Tag Helpers • ViewContext • View Components •

Slide 18

Slide 18 text

DEMO

Slide 19

Slide 19 text

DEMO «DAL/JobManagerContext.cs» (EF Core DbContext) «DAL/Models/Job.cs» (Entity)

Slide 20

Slide 20 text

DEMO Add Razor Page dialog

Slide 21

Slide 21 text

DEMO Generate Razor Pages using EF (CRUD) dialog After generating

Slide 22

Slide 22 text

DEMO. Index

Slide 23

Slide 23 text

Handlers Default Convention: On || On • Async, HTTP Verb = Get, Post, Put, Delete Требования к методам: • Должны быть публичными • Могут иметь любой тип возвращаемого значения, однако обычно либо возвращают void (или Task, если метод асинхронный), либо action result.

Slide 24

Slide 24 text

Tag Helpers • Генерируют HTML разметку на сервере • Большая схожесть с HTML (нет C# кода) • Поддержка IntelliSense • Не являются заменой HTML хелперам • Можно создавать свои собственные «Tag Helper-ы» Подключение всех «Tag Helper-ов» через «_ViewImports.cshtml» «Кастомные» атрибуты «Anchor Tag Helper»

Slide 25

Slide 25 text

DEMO. Create

Slide 26

Slide 26 text

TempData «CreateModel»: Добавляем свойство « 1. Message», помечая его при этом атрибутом «TempData» Задаем значение свойству перед 2. перенаправлением на другу страницу

Slide 27

Slide 27 text

TempData «IndexModel»: 3. Добавляем свойство «Message», помечая его при этом атрибутом «TempData» «Index.cshtml»: 4. Выводим значение свойства «Message» на страницу

Slide 28

Slide 28 text

После изменения «Route Template» страницы «Edit» при помощи добавления параметра маршрута «id»: http:///Jobs/Edit/1 RouteData: {page: /Object/Edit; id: 1} QueryString: {} Route Data Default settings: http:///Jobs/Edit?id=1 RouteData: {page: /Object/Edit} QueryString: {id: 1} «Edit.cshtml»

Slide 29

Slide 29 text

Named Handler Methods «EditModel» Naming convention: • On • OnAsync

Slide 30

Slide 30 text

Named Handler Methods Способ 1: Несколько «обработчиков» на одну форму Способ 2: Для каждого «обработчика» своя форма

Slide 31

Slide 31 text

Request Verification. XSRF/CSRF Традиционный подход: • «@Html.AntiForgeryToken» Применение атрибута « • ValidateAntiForgeryToken» там, где нужно (Action, Controller, Globally) Razor Pages: Для генерации токена достаточно • использовать «Form Tag Helper» Проверка происходит • автоматически

Slide 32

Slide 32 text

Filters • Authorization filters • Resource filters • Exception filters • Action filters (не поддерживаются в Razor Pages) • Result Filters • Page Filters (поддерживаются только в Razor Pages) Вызываемые методы в рамках «Page Filter»

Slide 33

Slide 33 text

Configuration • Изменить корневую папку для Razor Pages на папку Content • Задание соглашений по авторизации Добавление « • Route Template» к странице

Slide 34

Slide 34 text

MVC контроллеры. Как подключить в рамках приложения Razor Pages Необходимо добавить маршрут со следующим шаблоном вида: «{controller=Home}/{action=Index}/{id?}"» «Startup.cs»

Slide 35

Slide 35 text

Что будет нового в версии ASP.NET Core 2.1 Razor Pages? Razor Pages in an • «Area» Razor Pages • in a class library Support • «/Pages/Shared» • «BindPropertyAttribute» on page model or controller Implement • «IPageFilter» on page models Support absolute routes on Razor Pages •

Slide 36

Slide 36 text

Полезные ссылки: • https://github.com/staslado/kzndotnet1.Razor-Pages • https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/ • https://www.learnrazorpages.com/ • https://github.com/aspnet/Mvc • https://msdn.microsoft.com/en-us/magazine/mt842512.aspx • http://www.bipinjoshi.net/articles/16ecfe49-98df-4305-b53f- 2438d836f0d0.aspx

Slide 37

Slide 37 text

Спасибо за внимание☺