TOC

This article has been localized into Spanish by the community.

Razor:

Plantillas de delegados

La funcionalidad de plantillas de delegados en Razor te permite definir una pieza de marcado y luego usarla para representar un objeto específico en la página. Esta es una gran herramienta cuando necesitas representar por ejemplo una de tus clases en múltiples lugares dentro de tu Vista. Puede ser también una buena forma para separar una gran parte de marcado de la lógica de tu vista la cual lo puede hacer más fácil de leer y mantener vistas más grandes.

Cuando defines una plantilla de delegado, tú estarás usando un delegado Func - el cual podrá verse así:

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

En esta primera mitad, antes del signo de igual, yo creé un delegado movieTemplate. En la segunda parte, yo específico la plantilla de marcado a usar. Nota que usó una variable llamada item - Es pasada al delegado y el tipo es dinámico, significando que solamente puedo acceder a miembros en él (por ejemplo Title) los cuales no son revisados en tiempo de compilación. En vez de eso, son validados en tiempo de ejecución, donde se espera que existan en los objetos pasados al delegado - sino, ¡una excepción será arrojada!. Yo intento pasarle objetos del tipo Movie, una clase simple que usamos previamente en este tutorial:

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

Así que con nuestra plantilla de delegado en su lugar, ahora podemos usarla, por ejemplo dentro de un ciclo. Nota como ahora puedo solamente Llamar al delegado y pasarle el objeto Movie, en vez de definir el marcado dentro del ciclo:

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

Cuando llenas la colección movies, usada en el ciclo, con algunos datos de prueba, la salida generada severa así:

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

Aquí está un ejemplo completo, incluyendo los datos de prueba sobre películas, para que experimentes con ellos:

@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)
}

Resumen

La sintaxis de plantillas de delegados encontrados en Razor hacen fácil para ti definir marcado basada en plantillas las cuales pueden ser reutilizadas en múltiples lugares dentro de tus Vistas.


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!