In molti scenari può venir utile effetture il bind di un singolo oggetto ed il problema è facilmente risolvibile in diversi modi, uno dei quali è utilizzare il Repeater ed assegnargli come DataSource una collection con un singolo elemento, oppure crearsi un custom control ad hoc.
Questa alternativa risulta più "leggera", in quanto non è necessario portarsi dietro una serie di funzioni che, in un controllo come quello di cui si ha bisogno, possono risultare inutili.
Come per il Repeater, questo controllo avrà bisogno di un Template, un DataSource ed un RepeaterItem.
Una volta esposte pubblicamente ed assegnato loro un valore, ci basta effettuare l'ovverride del metodo CreateChildControl per istanziare il nostro template, come mostrato nel codice seguente:
public class SingleView : CompositeControl, INamingContainer { private ITemplate itemTemplate; private RepeaterItem container; private object dataSource; protected override void CreateChildControls() { if (ItemTemplate != null) { RepeaterItem item = new RepeaterItem(0, ListItemType.Item); item.DataItem = DataSource; container = item; ItemTemplate.InstantiateIn(container); this.Controls.Add(container); } } [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(RepeaterItem)), DefaultValue((string)null), Browsable(false)] public ITemplate ItemTemplate { get { return itemTemplate; } set { itemTemplate = value; } } [DefaultValue((string)null), Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public virtual object DataSource { get { return dataSource; } set { dataSource = value; } } public RepeaterItem Container { get { return container; } set { container = value; } } }
È importante istanziare il template all'interno del metodo CreateChildControl e non in altri metodi (es: OnDataBindind), in quanto al PostBack della pagina il databind potrebbe non essere richiamato e in quel caso si perderebbe tutto il contenuto del controllo.
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
Effettuare il binding di date in Blazor
Short-circuiting della Pipeline in ASP.NET Core
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Implementare il throttling in ASP.NET Core
Personalizzare l'errore del rate limiting middleware 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
- Steel Style CheckBox per Silverlight 4.0