This article has been localized into Romanian by the community.
Șabloane de delegați
Funcția de „șabloane de delegați” în Razor vă permite să definiți o bucată de markup și apoi să o utilizați pentru a reprezenta un obiect specific pe o pagină. Aceasta este o unealtă grozavă atunci când doriți să reprezentați, de exemplu, una din clasele dvs. în multiple locuri în interiorul View-ului dvs. Poate fi de asemenea o modalitate extraordinară pentru a separa mari bucăți de markup din logica View-ului dvs. ce vă permite să citiți și să mențineți mai ușor View-uri enorme.
Atunci când definiți șabloane de delegați, veți folosi un delegat Func - ce poate arăta în felul următor:
Func<dynamic, object> movieTemplate = @<div>@item.Title [@item.ReleaseDate.ToShortDateString()]</div>;
În prima jumătate, înainte de semnul egal, s-a creat delegatul movieTemplate. În partea două, se specifică șablonul markup-ului ce va fi folosit. Observați că s-a folosit o variabilă numită item - este oferită în delegat și are tipul dinamic, asta înseamnă că se pot accesa membrii (ex: Title) ce nu sunt verificate la compilare, dar sunt validate la timpul de execuție, unde este de așteptat să existe în obiectul transmis delegatului - dacă nu, o excepție va fi aruncată! Se va trece în obiecte de tip Movie, o clasă simplă care a fost folosită anterior în acest tutorial:
public class Movie
{
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
}
Cu șablonul de delegat pus la locul lui, îl puteți folosi, de exemplu într-o buclă. Observați cum puteți chema și trimite delegatul în obiectul Movie, în loc să definiți markup-ul în buclă:
@foreach(var movie in movies)
{
@movieTemplate(movie)
}
Atunci când populați colecția movies, folosită în buclă, cu anumite date de test, rezultatul generat va arăta în felul următor:
<div>The Godfather [24-03-1972]</div>
<div>Forrest Gump [06-07-1994]</div>
<div>Fight Club [15-10-1999]</div>
Și mai jos aveți un exemplu complet, ce include date de test despre filme, pentru ca să experimentați:
@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)
}
În concluzie
Sintaxa șabloanelor de delegați regăsită în Razor facilitează definirea, de către dvs., a șabloanelor de tip markup ce se pot reutiliza în multiple locuri în View-urile dvs.