Pesquisa

segunda-feira, 7 de março de 2011

Customização UpdatePanel

Para personalizar a tag HTML que é gerada pelo update panel, basta sobrescrever o método RenderChildren.

Abaixo tem um exemplo baseado de um post estraído do http://weblogs.asp.net.

Pode-se customizar até mesmo a classe que será utlizado no elemento do UpdatePanel.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;

namespace Customizado.ControlLibrary
{
[ToolboxData("<{0}:CustomizadoUpdatepanel runat=server></{0}:CustomizadoUpdatepanel>")]
public class CustomizadoUpdatepanel : System.Web.UI.UpdatePanel
{
private string cssClass;
private HtmlTextWriterTag elemento = HtmlTextWriterTag.Div;

[DefaultValue("")]
[Description("Applies a CSS style to the panel.")]
public string CssClass
{
get
{
return cssClass ?? String.Empty;
}
set
{
cssClass = value;
}
}

// Hide the base class's RenderMode property since we don't use it
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new UpdatePanelRenderMode ModoRenderizar
{
get
{
return base.RenderMode;
}
set
{
base.RenderMode = value;
}
}

[DefaultValue(HtmlTextWriterTag.Div)]
[Description("A tag para renderizar o painel")]
public HtmlTextWriterTag Elemento
{
get
{
return elemento;
}
set
{
elemento = value;
}
}

protected override void RenderChildren(HtmlTextWriter escrever)
{
if (IsInPartialRendering)
{
// If the UpdatePanel is rendering in "partial" mode that means
// it's the top-level UpdatePanel in this part of the page, so
// it doesn't render its outer tag. We just delegate to the base
// class to do all the work.
base.RenderChildren(escrever);
}
else
{
// If we're rendering in normal HTML mode we do all the new custom
// rendering. We then go render our children, which is what the
// normal control's behavior is.
escrever.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
if (CssClass.Length > 0)
{
escrever.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
}
escrever.RenderBeginTag(Elemento);
foreach (Control filho in Controls)
{
filho.RenderControl(escrever);
}
escrever.RenderEndTag();
}
}
}
}



Nenhum comentário:

Postar um comentário