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
Load test di ASP.NET Core con k6
Utilizzare QuickGrid di Blazor con Entity Framework
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Effettuare il binding di date in Blazor
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Short-circuiting della Pipeline in ASP.NET Core
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Le novità di Entity Framework 8
Eseguire una GroupBy per entity in Entity Framework
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Implementare il throttling in ASP.NET Core
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2