Programming Languages Hacks

Importanti regole per linguaggi di programmazione rilevanti come Java, C, C++, C#…

  • Subscribe

  • Lettori

    I miei lettori abituali

  • Twitter

WebControl Sempre Abilitati

Posted by Ricibald on February 6th, 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]);
        }
    }

Leave a Reply

You must be logged in to post a comment.