Uno dei vantaggi principali dell'uso dei Dynamic Data Controls risiede nell'estrema semplicità con cui è possibile applicare layout personalizzati alla visualizzazione o alla modifica di una determinata proprietà.
Supponiamo, ad esempio, di rappresentare lato database il sesso di una persona con "M" o "F". Per far sì che il sito web visualizzi questa informazione in formato esteso, non dobbiamo far altro che costruire un Field Template personalizzato. Il primo passo da compiere è quello di aggiungere uno UserControl (nel nostro esempio, Gender.ascx) alla cartella DyanmicData/FieldTemplates
e successivamente modificarne il code-behind in modo che erediti dalla classe FieldTemplateUserControl:
public partial class Gender : FieldTemplateUserControl { ... }
A questo punto possiamo iniziare a scrivere il markup personalizzato, ad esempio aggiungendo una Label in binding con la proprietà FieldValueString:
<asp:Label runat="server" ID="lblGender" Text="<%# FieldValueString %>" />
Si tratta di una proprietà virtual, definita all'interno di FieldTemplateUserControl, che convenzionalmente restituisce la rappresentazione stringa del dato che il FieldTemplate deve gestire. Nel nostro caso, è sufficiente effettuarne l'override per introdurre la logica di visualizzazione desiderata:
public override string FieldValueString { get { string value = this.FieldValue as string; if (value == "M") value = "Maschio"; else if (value == "F") value = "Femmina"; return value; } }
Il codice in alto è estremamente semplice e si limita a prelevare il dato da FieldValue e a restituire la stringa desiderata. Anche se non necessario, all'interno del custom field template è buona norma anche ridefinire la proprietà DataControl, restituendo l'istanza del controllo web che utilizziamo per rappresentare il dato; ciò consente ad un chiamante esterno (ad esempio, la pagina che ospita il nostro template) di ottenere eventualmente un riferimento ad esso.
public override Control DataControl { get { return this.lblGender; } }
Come ultimo passaggio, non dobbiamo far altro che associare il template Gender alla proprietà desiderata, utilizzando il sistema dei MetadataType che abbiamo visto nello script #1004:
[MetadataType(typeof(PersonMetadata))] public partial class Person { } public class PersonMetadata { [UIHint("Gender")] public string Gender { get; set; } }
In un prossimo script vedremo come una tecnica simile possa essere utilizzata anche per personalizzare la fase di edit di un dato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare le navigation property in QuickGrid di Blazor
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Le novità di Entity Framework 8
Utilizzare QuickGrid di Blazor con Entity Framework
Change tracking e composition in Entity Framework
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Filtering sulle colonne in una QuickGrid di Blazor
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Effettuare il binding di date in Blazor
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Generare velocemente pagine CRUD in Blazor con QuickGrid
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT