WebControl Sempre Abilitati
Posted by Ricibald on 6th February 2009
Il problema è questo: devo creare un LinkButton che sia sempre Enabled. Ma se un suo contenitore (ad esempio un Panel) è disabilitato, allora il LinkButton nel rendering va ad impostare la proprietà disabled navigando tra i padri.
Sarebbe bello se riuscissimo a modificare il comportamento dei WebControl per non rilevare disabled in uno dei padri. La soluzione sta nell’impedire che il nostro controllo figlio (ad esempio il nostro LinkButton) faccia uso di alcune funzionalità ereditate dalla classe base WebControl.
Ricerche su Internet non sono servite. Ho cercato come è implementato il WebControl ispezionando il codice sorgente di WebControl di Mono e il codice sorgente di LinkButton.
Il risultato è di seguito:
public class LinkButtonSmartAlwaysEnabled : LinkButton
{
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
//base.AddAttributesToRender(writer);
if (ID != null)
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
if (AccessKey != string.Empty)
writer.AddAttribute(HtmlTextWriterAttribute.Accesskey, AccessKey);
//if (!enabled)
// writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
if (ToolTip != string.Empty)
writer.AddAttribute(HtmlTextWriterAttribute.Title, ToolTip);
if (TabIndex != 0)
writer.AddAttribute(HtmlTextWriterAttribute.Tabindex, TabIndex.ToString());
if (Enabled && Page != null)
{
string href = Page.ClientScript.GetPostBackClientHyperlink(this, "");
writer.AddAttribute(HtmlTextWriterAttribute.Href, href);
}
if (this.Attributes != null)
foreach (string s in this.Attributes.Keys)
writer.AddAttribute(s, this.Attributes[s]);
}
}
Posted in .net | No Comments »