DropDownList alcune cose che cambiano...

di Marco Leoncini, in asp.net,
 asp.net 2.0 mette a disposizioe un bel numero di nuovi Web e Html control, ma non per questo quelli vecchi , sono rimasti li a prendere polvere.
La conversione del WebControl DropDownListFX non ha richiesto molto tempo, rimosse le chiamate a metodi "segnati" come obsoleti, cambiato il modo di gestire javascript, tutto funzionava (avrebbe funzionato anche senza cambiare una virgola).
ma fermarsi alla superfice non mi piace, quando ci riesco, mi piace scendere più nel dettaglio, e mettere in discussione le scelte fattea suo tempo.
prendiamo la DropDownList, il controllo di cui parlavamo sopra ne "mima" il comportamente, estendendone le caratteristiche estetiche.

albero "genealogico" ver 1.x

DropDownList
>ListControl
+>WebControl
-+>Control

DropDownListFx
>ListControl
+>WebControl
-+>Control

albero "genealogico" ver 2.0

DropDownList
>ListControl
+>DataBoundControl
-+>BaseDataBoundControl
--+>WebControl
---+>Control

la nuova DropDownList si trova con una bella famiglia allargata, un problema, con le feste che si avvicinano.
i cambiamenti, non si limitano appa "parentela" , ma interessano la distribuzione delle responsailità tra i WebControl.

prendiamo ad esempio il metodo AddAttributesToRender dettal DropDownList
ver 1.x

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
if (this.Page != null)
{
this.Page.VerifyRenderingInServerForm(this);
}
writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
if (this.AutoPostBack && (this.Page != null))
{
string text1 = this.Page.GetPostBackClientEvent(this, "");
if (base.HasAttributes)
{
string text2 = base.Attributes["onchange"];
if (text2 != null)
{
text1 = text2 + text1;
base.Attributes.Remove("onchange");
}
}
writer.AddAttribute(HtmlTextWriterAttribute.Onchange, text1);
writer.AddAttribute("language", "javascript");
}
base.AddAttributesToRender(writer);
}

ver 2.0

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
string text1 = this.UniqueID;
if (text1 != null)
{
writer.AddAttribute(HtmlTextWriterAttribute.Name, text1);
}
base.AddAttributesToRender(writer);
}

come si vede il nuovo metodo è molto più snello, tutta la logica si è spostata nella classe ListControl (cosa diametralemente opposta a quanto accadeva nella 1.x)

protected override void AddAttributesToRender(HtmlTextWriter writer)
{
...<omisissis>...
if ((this.AutoPostBack && (this.Page != null)) && this.Page.ClientSupportsJavaScript)
{
string text1 = null;
if (base.HasAttributes)
{
...<omisissis>...
}
PostBackOptions options1 = new PostBackOptions(this, string.Empty);
if (this.CausesValidation)
{
options1.PerformValidation = true;
options1.ValidationGroup = this.ValidationGroup;
}
if (this.Page.Form != null)
{
options1.AutoPostBack = true;
}
text1 = Util.MergeScript(text1, this.Page.ClientScript.GetPostBackEventReference(options1));
writer.AddAttribute(HtmlTextWriterAttribute.Onchange, text1);
if (base.EnableLegacyRendering)
{
writer.AddAttribute("language", "javascript", false);
}
}
...<omisissis>...
base.AddAttributesToRender(writer);
}
ci sono diverse cose nuove e interessanti, dall'ulitizzo della nuova classe PostBackOptions, alla validazione a gruppi.
visto questo gran numero di novità, limitarsi alla semplice ricompilazione mi sembrava poco, così ho deciso di riprogettare DropDownFx, , per prima cosa ho "ripristanato" AddAtributeToRender, nella ormai vecchia implementazione eseguivo l'override, e lasciavo il metodo vuoto, adesso mi servirò dei servigi di ListControl.

DataBoundControl metiterebbe un discorso apparte...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese