rotte in .Net Core

Aspnet Core 2.1 Razor Pages Library

Nel mese di aprile 2018 è stato rilasciata la versione 2.1 di AspNet Core 2.1. Una delle novità più interessanti riguarda la possibilità di creare Razor Pages Library.

Le Razor Page sono state introdotte all’interno del framework a partire dalla versione 2.0, e consentono di creare view che possono essere renderizzate senza avere un controller associato. Il codice di una Razor Page è molto simile a quello di una View scritta con Razor, con la differenza dell’utilizzo di una nuova direttiva @page, che deve essere la prima direttiva presente nella View.

La direttiva @page trasforma la View direttamente in un Action MVC, gestendo in pratica la chiamata direttamente, senza passare da un Controller.

Perchè è stato introdotto un nuovo modello per costruire l’architettura MVC?

Probabilmente la risposta può essere ricercata nella maggiore leggerezza delle Razor page, che si avvicina a quelle scritte in altri linguaggi di scripting come PHP o addirittura ASP.

In ambito strutturale, l’utilizzo di Razor Page consente di scrivere applicazioni semplici (che probabilmente non hanno la necessità di utilizzare controller) e strutturare modelli in classi separate.

Come già anticipato le Razor Page sono sempre contrassegnate dalla direttiva @page (che deve essere sempre la prima), indicando al motore di rendering che si tratta di una Razor Page e non di una normale View di MVC (quindi con il relativo controller).

E’ possibile associare un modello ad una Razor page, che sarà una classe che dovrà ereditare da PageModel. Per convenzione il file di classe PageModel deve avere lo stesso nome della Razor Page a cui si riferisce (ovviamente il file dovrà avere l’estensione .cs). Se, ad esempio, la Razor Pages si chiama Test.cshtml, la corrispondente classe PageModel si dovrà chiamare Test.cshtml.cs. Un esempio di modello è quello della classe AboutModel:

dove il metodo OnGet() è il gestore delle chiamate http di tipo GET. Esiste anche un gestore simile, per le chiamate di tipo POST, denominato OnPost(). Nell’ottica di sviluppo in modalità asincrona, sono presenti anche OnGetAsync e OnPostAsync.

Alcuni degli handler che possono essere utilizzati per la gestione delle chiamate sono:

  • OnGet
  • OnPost
  • OnGetAsync
  • OnPostAsync
  • OnPostRemoveLoginAsync
  • OnGetLinkLoginCallbackAsync

Riprendendo l’esempio della Razor Pages About:

dove è stato associaoto il model definito in precedenza nella classe AboutModel.

Una forma alternativa per scrivere il codice precedente è quella di eliminare il code behind e scrivere tutto in-line:

E’ possibile definire l’equivalente del codice code-behind all’interno di @function.

Questo tipo di rappresentazione risulta sicuramente più semplice in fase di lettura.

Razor Class Library (RCL)

Con la versione 2.1 di ASPNet Core, sono state introdotte le Razor Class Library (RCL). In particolare consentono di pacchettizzare e rendere riutilizzabili:

  • Razor Views
  • Pages
  • Controllers
  • Page Models
  • View components
  • Data models

Utilizzando questo nuovo modello di sviluppo, le applicazioni possono includere le RCL e sovrascrivere i componenti presenti al loro interno. In particolare, quando una View, una Partial View o una Razor page viene trovata all’interno dell’applicazione e contemporaneamente anche all’interno della RCL, quella presente all’interno dell’applicazione ha precedenza.

Pubblicato da

Andrea Merlin

Laureato in informatica, diversi corsi di specializzazione legati allo Sviluppo Software e alla Computer forensics. Appassionato di nuove tecnologie, amo la programmazione, la Business Intelligence e tematiche legate alla Privacy.Sempre alla ricerca di nuove idee, stimoli … e progetti da seguire!Amo trascorrere il tempo libero in Val Borbera, un piccolo angolo del Piemonte, in provincia di Alessandria.