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
Effettuare il binding di date in Blazor
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Le novità di Entity Framework 8
Load test di ASP.NET Core con k6
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Eseguire una GroupBy per entity in Entity Framework
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Cache policy su route groups di Minimal API in ASP.NET Core 7
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet