Non stiamo parlando di un ritorno a WebForm ma di un'evoluzione (o meglio) di un'alternativa al pattern MVC. Le Razor Pages possono essere un buon motore per smuovere le migrazioni di vecchie applicazioni, utilizzando un paradigma di pagina (vicino a quello che chi utilizza WebForm già conosce) ma con una visione e pulizia degna delle migliori applicazioni MVC .
Ecco che le Razor Pages si stanno ritagliano il loro spazio, ed in questa sessione cercheremo di affrontare i pro e contro del loro utilizzo, capendone al meglio i casi duso ideali.
4. OBBIETTIVI
Ridurre il numero di cartelle e file all'interno di un progetto
Semplificare la struttura del progetto
Avere un modello di sviluppo page-focused
Semplificare la migrazione da altre tecnologie verso ASP.NET Core
7. Razor Pages is the recommended way to build
UI for web apps in ASP.NET Core
https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start?view=aspnetcore-2.1
8. Controller, view e view-model in un "unico" file
Le action get/post utilizzate dalla view sono nella classe contenuta nel file cs
collegato
La classe collegata è "anche" il model della pagina
La classe estende PageModel
E' possibile richiamare action di un controller standard
Non è più necessario utilizzare il ViewData/ViewBag per passare parti del model alla
view
Tutte le proprietà del file cs sono visibili dalla View
Le proprietà marcate con il BindPropertyAttribute sfruttano il meccanismo di
Model-Binding, sia per essere popolate che per la validazione
RAZOR PAGES
10. Controller e View possono diventare di difficile gestione in applicazioni di
grosse dimensioni
L'avere molta logica/complessità in un unico controller si scontra con i
principi di Single Responsibility Principle or Open/Closed Principles
"PROBLEMATICHE" DI ASP.NET MVC
13. GESTIONE GET E POST
OnGet → Quando entro nella pagina
OnPost, OnPostAsync → Quando devo gestire il submit di una form
OnPost* → Quando devo gestire altre form nella pagina
14. ROUTING
Route basato su convenzioni
L'url replica la struttura di cartelle e file del file-system
15. VIEWDATA E TEMPDATA
Marcare le proprietà della utilizzando il ViewDataAttribute o il
TempDataAttribute per far che questi valori siano passati/recuperati nel/dal
ViewData e TempData
16. POSSIBILI RISPOSTE AI GET E POST
RedirectToPage è l'equivalente del RedirectToAction di MVC
Page per ritornare la pagina corrente
Valgono anche le classiche risposte usate in MVC
BadRequest, Content, File, NotFound, …
19. RAZOR CLASS LIBRARY
Possibilità di includere e distribuire le RazorPages in Class Library
Permette di includere/pluggare funzionalità nell'applicativo solo referenziando il package
che contiene le pagine
La Razor Class Library viene sviluppata alla pari di un'Area, quindi con la
struttura delle cartelle nel seguente modo:
Areas/<<nome-feature>>/Pages/Pagina.cshtml
Si possono includere anche pagine di layout.
E' possibile utilizzare pagine di layout esterne (se non ne viene specificata una presente
all'interno dell'area)
22. L'80% del codice è condiviso tra MVC e Razor Pages
ASP.NET Core permette di utilizzare entrambe le funzionalità nello stesso
progetto
Es: Razor Pages per la UI e MVC per le API
MVC NON MORIRÀ