TOC

This article has been localized into Italian by the community.

Razor:

Modelli di funzioni

I Modelli di delegati in Razor vi permettono di definire un blocco di markup e quindi di riutilizzarlo per rappresentare uno specifico oggetto sulla pagina. Si tratta di un grande strumento quando avete bisogno di rappresentare, per esempio, una delle vostre classi in più di un posto all'interno di una delle vostre View. Può anche essere un grande metodo per separare una largo blocco di markup dalla logica della vostra View e quindi rendere il tutto più facile da leggere a da manutenere soprattutto per View molto grandi

Quando si definisco i Modelli di Funzione si utilizza il delegate Func - Simile al seguente:

Func<dynamic, object> movieTemplate = @<div>@item.Title [@item.ReleaseDate.ToShortDateString()]</div>;

Nella prima parte, prima del simbolo uguale, abbiamo creato il movieTemplate delegate. Nella seconda parte, abbiamo specificato il modello di markup che dovrà essere utilizzato. Notate che abbiamo utilizzato una variabile chiamata item. Viene passata al delegate and il tipo è dynamic, il che significa che possiamo accedere ai membri interni (per esempio Title) senza che siano controllati al momento della compilazione. Al contrario sono verificati a runtime, dove ci si aspetta che esistano nell'oggetto passato al delegate - altrimenti verrà emessa una eccezzione!. Abbiamo intenzione di passare degli oggetti del tipo Movie, la semplice classe che abbiamo usato in precedenza in questa guida.

public class Movie
{
    public string Title { get; set; }
    public DateTime ReleaseDate { get; set; }
}

Così, con il nostro modello delegate sistemato, possiamo utilizzarlo. Per esempio all'interno di un loop. Notate come possiamo semplicemente chiamare il delegate e passare l'oggetto Movie, invece di definire il markup all'interno del loop:

@foreach(var movie in movies)
{
    @movieTemplate(movie)
}

Se popoliamo la collezzione movies con dei dati di test e quindi la usiamo nel loop, l'output generato sarà come il seguente:

<div>The Godfather [24-03-1972]</div>
<div>Forrest Gump [06-07-1994]</div>
<div>Fight Club [15-10-1999]</div>

Ed ecco un esempio completo, incluso i dati di test sui Movie per consentirvi di fare qualche esperimento:

@using HelloMVCWorld.Models
@{
    ViewData["Title"] = "TemplatedDelegate";

    Func<dynamic, object> movieTemplate = @<div>@item.Title [@item.ReleaseDate.ToShortDateString()]</div>;

    List<Movie> movies = new List<Movie>();
    movies.Add(new Movie() { Title = "The Godfather", ReleaseDate = new DateTime(1972, 3, 24) });
    movies.Add(new Movie() { Title = "Forrest Gump", ReleaseDate = new DateTime(1994, 7, 6) });
    movies.Add(new Movie() { Title = "Fight Club", ReleaseDate = new DateTime(1999, 10, 15) });

}

@foreach(var movie in movies)
{
    @movieTemplate(movie)
}

Riepilogo

La sintassi per i modelli delegati che ci è fornita da Razor vi renderà semplice definire dei modelli basati sul markup che possono essere utilizzati più volte nelle vostre Views

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!