Realizzare branch e cicli con ASP.NET Razor

di Marco De Sanctis, in ASP.NET 4.0, ASP.NET MVC, ASP.NET Web Pages,

Quando realizziamo una pagina Web tramite Razor, tipicamente abbiamo bisogno di visualizzare alcune porzioni di markup solo al verificarsi di una condizione, o di ripetere dell'HTML per un certo numero di volte.

Come già sappiamo dallo script #1063, tramite il carattere @ possiamo effettuare lo switching tra il contesto del markup e quello del codice. Ciò può essere utile, ad esempio, per realizzare un blocco if o un ciclo for. In questi casi, il comportamento di Razor varia leggermente a seconda del fatto che stiamo utilizzando C# o Visual Basic. In particolare, se siamo in una pagina C#, il parser è in grado di accorgersi automaticamente della presenza di markup HTML, all'interno del blocco di codice:

C#
@if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday)
{
  <h1>Buona domenica!!</h1>
}
else
{
  <h1>Purtroppo è un giorno lavorativo</h1>
}

Ciò è possibile perché la porzione di HTML è ben evidenziata dalla presenza di un tag. Nel caso in cui vogliamo emettere del semplice testo, invece, è possibile utilizzare il tag speciale < text> o, alternativamente, il simbolo "@:", che svolge la medesima funzione:

C#
@if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday)
{
  <text>Buona domenica!!</text>
}
else
{
  @:Purtroppo è un giorno lavorativo
}

Razor con Visual Basic è invece decisamente più rigido, e richiede che, all'interno di blocchi di codice, le righe di markup vengano esplicitamente evidenziate tramite il carattere @, come nell'esempio seguente:

Visual Basic
@If DateTime.Today.DayOfWeek = DayOfWeek.Sunday
  @<h1>Buona domenica!!</h1>
Else
  @Purtroppo è un giorno lavorativo
End If

Come possiamo notare, in particolare, in Visual Basic il carattere @ è richiesto sia nel caso di presenza esplicita dei tag HTML che nel caso di testo semplice.

I medesimi concetti si applicano, ovviamente, anche ai cicli For e For Each:

C#
<h4>Giorni della settimana:</h4>
<ul>@for (int index = 0; index <= 6; index++)
{
  <li>
    @((DayOfWeek)index)
  </li>
}
</ul>

Visual Basic
<h4>Giorni della settimana:</h4>
<ul>@For index as Integer = 0 To 6
  @<li>
    @DirectCast(index, DayOfWeek)
  </li>
Next
</ul>

Il codice mostrato in questi esempi è leggermente più complesso del precedente, dato che contiene due context-switching, uno per il tag HTML e uno per portare in output l'elemento corrente dell'enumerazione.

Riferimenti utili

Il nostro speciale su ASP.NET Razor
https://www.aspitalia.com/focuson/1253/Speciale-Razor-View-Engine-WebMatrix-ASP.NET-MVC.aspx

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi