Nello script #921 abbiamo visto come impostare a runtime il valore del parametro utilizzato nell'operazione di selezione.
Benché appropriata, alla lunga questa tecnica può essere ripetitiva e poco portabile, ed a questo scopo estenderemo la classe Parameter per richiamate un metodo della pagina.
Per prima cosa aggiungiamo la proprietà di tipo string per specificare il nome del parametro da richiamare.
public class PageMethodParameter : Parameter { public string MethodName { get { string _value = (string)ViewState["MethodName"]; if (!string.IsNullOrEmpty(_value)) return _value; throw new Exception("Nessun metodo specificato"); } set { ViewState["MethodName"] = value; } } }
In seguito eseguiamo l'override del metodo Evaluate, dove tramite Reflection andremo ad invocare il metodo della pagina.
protected override object Evaluate(HttpContext context, Control control) { if (_callPageMethod) { if (control == null) throw new ArgumentNullException("control"); Type _pageType = control.Page.GetType(); MethodInfo _methodInfo = _pageType.GetMethod(MethodName); if (_methodInfo == null) throw new Exception(string.Format("Impossibile recuperare il metodo {0} da invocare", MethodName)); return _methodInfo.Invoke(control.Page, null); } _callPageMethod = true; return null; }
La chiamata al metodo è subordinata al valore di un campo di tipo bool, accorgimento necessario per evitare una doppia chiamata.
Infatti il metodo Evaluate viene richiamato la prima volta durante la fase di inizializzazione dell'ObjectDataSource e memorizzato nel ViewState, successivamente avviene la chiamata generata da una delle operazioni possibili tra Select, Insert, Delete e Update.
Infine, vista la possibilità che l'oggetto restituito dal metodo invocato non sia serializzabile, il riferimento nel ViewState viene impostato a null.
protected override object SaveViewState() { ViewState["ParameterValue"] = null; return base.SaveViewState(); }
Per poter utilizzare il nuovo Parameter è sufficiente registrarlo come qualsiasi altro custom control e poi nella pagina fare riferimento a quest'ultimo all'interno della dichiarazione dei parametri.
Approfondimenti
#921 - Specificare un tipo custom come valore di un parametro di selezione dell'ObjectDataSource
https://www.aspitalia.com/script/921/Specificare-Tipo-Custom-Valore-Parametro-Selezione-ObjectDataSource.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- ora è la volta di #azure. http://aspitalia.com/build-win8 #BldWin
- Implementare il pattern Dispose del .NET Framework
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare la cancellazione logica in #azure Container Registry https://aspit.co/ccy di @CristianCivera
- Centrare elementi in HTML tramite CSS
- Annunciato #PowerBI Embedded e disponibile in preview a partire da oggi! https://aspit.co/build2016 #build2016
- con il code inspector si potrà vedere il codice server associato all'HTML prodotto, ... http://aspitalia.com/build-win8 #BldWin
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!