مدیریت تگ span ایجاد شده به صورت پیش فرض در کنترل های ASP.NET

اگر تا به حال اقدام به ساخت کنترل های ASP.NET کرده باشید، مشاهده کرده اید که هر کنترلی که ایجاد میشود یک تگ span به صورت پیش فرض ایجاد میکند. دلیل ایجاد این تگ این است که کنترل های وبی این تگ را به صورت پیش فرض برای خود تعریف کرده اند.

protected internal override void Render(HtmlTextWriter writer)
{
    this.RenderBeginTag(writer);
    this.RenderContents(writer);
    this.RenderEndTag(writer);
}
برای رفع این مشکل کافی است متد Render را override کنید.
protected override void Render(HtmlTextWriter writer)
{
    RenderContents(writer);
}
دلیل این امر این است که کنترل این متد به صورت پیش فرض به شکل زیر پیاده سازی شده است. مشاهده میکنید که این متد ابتدا تابع RenderBeginTag را صدا میزند که پیاده سازی این متد به شکل زیر است:
protected internal override void Render(HtmlTextWriter writer)
{
    this.RenderBeginTag(writer);
    this.RenderContents(writer);
    this.RenderEndTag(writer);
}
این متد ابتدا tagKey را ایجاد میکند. و این کار باعث ایجاد span میشود، اما با override کردن متد Render دیگر این تگ ایجاد نمیشود. حال اگر بخاهیم بجای تگ span تگ دیگری را ایجاد کنیم چه؟ فرض کنید میخاهید کنترل شما یک container داشته باشد اما میخاهید container شما از جنس div باشد. برای این کار کافی است خاصیت زیر را به شکل نمایش داده شده override کنید.
protected override HtmlTextWriterTag TagKey
{

    get{ return HtmlTextWriterTag.Div;}
}

0 نظرات: