Definire metodi e helper all'interno di una pagina Razor in ASP.NET Web Pages o ASP.NET MVC

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

Capita spesso di dover riutilizzare più volte la stessa logica all'interno di una pagina Razor, ad esempio per rappresentare in maniera uniforme il medesimo dato. Esigenze di questo tipo si risolvono comunemente creando un metodo. Ciò che può inizialmente spiazzare, però, è che se proviamo a implementarlo all'interno di un comune blocco di codice di una pagina Razor, otteniamo un errore di compilazione.

C#
@{
  private string SomeMethod()
  {
    // scritto così non compila...
  }
}

Visual Basic
@Code

  Private Function SomeMethod() As String()
    ' scritto così non compila
  End Function

End Code

Questo accade perché, in fase di parsing del markup, Razor include il contenuto di un blocco di codice all'interno del metodo Execute della classe base WebPage o WebViewPage (a seconda del fatto che stiamo realizzando un'applicazione ASP.NET Web Pages o ASP.NET MVC).

Per realizzare invece dei metodi o proprietà aggiuntivi, è necessario sfruttare l'apposito blocco @functions:

C#
@functions{
  private string SomeMethod()
  {
    return DateTime.Today.ToShortDateString();
  }
}

<span>La data di oggi è @this.SomeMethod()</span>

La sintassi in Visual Basic è simile e utilizza il blocco Functions..End Functions:

Visual Basic
@Functions
  Private Function SomeMethod() As String
    
    Return DateTime.Today.ToShortDateString()
  End Function
End Functions

All'interno di una pagina possiamo realizzare anche delle particolari categorie di metodi, chiamati Helper, utilizzando l'omonimo blocco helper. La differenza rispetto ai metodi tradizionali, è che essi non presentano un valore di ritorno, ma scrivono direttamente all'interno del buffer in output, dandoci quindi la possibilità di inserire del markup al loro interno:

C#
@helper ShowTodayDate()
{
  if (DateTime.Today.Day == 25 && DateTime.Today.Month == 12)
  {
    <h2>Buon Natale!!!</h2>
  }
  else
  {
    <span>La data di oggi è @DateTime.Today.ToShortDateString()</span>
  }
}

Visual Basic
@Helper ShowTodayDate()

  If DateTime.Today.Day = 25 AndAlso DateTime.Today.Month = 12
    @<h2>Buon Natale!!!</h2>
  Else
    @<span>La data di oggi è @DateTime.Today.ToShortDateString()</span>
  End If
  
End Helper

Per utilizzare un helper, è sufficiente referenziarlo all'interno della pagina:

<div class="...">
  @ShowTodayDate()
</div>

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