2009-08-19 98 views
0

我正在写一个ASP.NET自定义组合控件(继承System.Web.UI.WebControls.CompositeControl)。什么都没有Property TagKey()

默认情况下,我的控件标记呈现由标记包围。我知道我可以通过TagKey属性来将返回值设置为我想从System.Web.UI.HtmlTextWriterTag枚举中获得的任何标记。

我的问题:我可以让我的控件呈现没有.NET添加标记周围吗?


UPDATE(3/2/2011)Thanks Swati for your answer。我想说明我现在如何解决我的问题。我想我会整合斯瓦蒂的一些想法。具体来说,AddAttributestoRender(),但我想知道是否需要,因为CompositeControl将缺乏父标记标记来保存属性。

当我不想要包含标记标记时,我覆盖CompositeControl的两个方法&。

Protected Overrides ReadOnly Property TagKey() As System.Web.UI.HtmlTextWriterTag 
    Get 
     ' System defaults return as HtmlTextWriterTag.Span 
     Return HtmlTextWriterTag.Unknown 
    End Get 
End Property 

Public Overrides Sub RenderBeginTag(ByVal writer As System.Web.UI.HtmlTextWriter) 
    If Me.TagKey <> HtmlTextWriterTag.Unknown Then 
     MyBase.RenderBeginTag(writer) 
    End If 
End Sub 

Public Overrides Sub RenderEndTag(ByVal writer As System.Web.UI.HtmlTextWriter) 
    If Me.TagKey <> HtmlTextWriterTag.Unknown Then 
     MyBase.RenderBeginTag(writer) 
    End If 
End Sub 

回答

2

其可能摆脱与CompositeControl的含有标签,但其针对的CompositeControl喜欢的工作方式工作(见下文)

正确的方法,显然,以TagKey设置为任何的你的控件的主要标签实际上是(div,table或其他)。

然后重写AddAttributesToRender()来设置你的包装器标签所需的属性。

你想在包装标签内的东西应通过重写RenderContents()方法来呈现。

的CompositeControl从Control继承,见TagKey和的AddAttributesToRender()here.

上GeeksWithBlogs有人写有关类似问题的用户的讨论here

先手虽然去掉包装的,看到这个forum post,它显示了一种重写控件构造函数和RenderBeginTag和RenderEndTag方法来移除包装标签的方法。

+0

外卖点:其对CompositeControl的喜欢的工作 我不得不说,非常感谢codeulike您指出的AddAttributesToRender()的方式工作。我一直想念那个。这块金块是超级有用的。 请注意其他作家 - 从这篇文章学习。答案包括很大的帮助和支持链接! WONDERFULLY有帮助 – MADCookie 2009-08-28 19:38:25

0

难道你只是重写Render()方法,迫使它只渲染内容?也许这样的事情会做的伎俩:

public override void Render(HtmlTextWriter writer) 
{ 
    RenderContents(writer); 
} 
1

利用RenderBeginTag.The“RenderBeginTag”调用其他方法,对“的AddAttributesToRender”的方法,来处理所有类型的相关开场仅标签“属性”的。 “TagKey”对应于Web控件对应的默认HTML标签。如果我们在“RenderBegintag”方法中实现自己的标签,我们可以简单地忘掉“TagKey”问题。你可以做这样的事情..

Public virtual void RenderBeginTag(HtmlTextWriter Writer) 
{ 
    AddAttributestoRender(writer); 
    HtmlTextWriterTag tagKey = TagKey; 
    If(tagKey != HtmlTextWriterTag.Unknown) 
    Writer.RenderBeginTag(tagKey); 
    Else 
    Writer.RenderBeginTag(this.tagName); 
} 
+0

很好说。我喜欢Stack Overflow如何为非常古老的问题带来新鲜的观点。感谢您花时间分享。 – MADCookie 2011-03-02 16:04:44