asp.net 属性TagKey()中没有任何内容

fgw7neuy  于 2022-12-24  发布在  .NET
关注(0)|答案(3)|浏览(160)

我正在编写一个ASP.NET自定义复合控件(继承System.Web.UI.WebControls.CompositeControl)。
默认情况下,我的控件标记呈现为被标记包围。我知道我可以覆盖属性TagKey,以将返回设置为System.Web.UI.HtmlTextWriterTag枚举中的任何标记。
我的问题:我可以在不使用. NET添加标记的情况下呈现控件吗?
更新(3/2/2011)谢谢Swati的回答。我想展示一下我现在是如何解决我的问题的。我想我会整合Swati的一些想法。具体来说,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
aydmsdu9

aydmsdu91#

可以用CompositeControl去掉包含标签,但这与CompositeControl喜欢的工作方式相反(见下文)。
显然,正确的方法是将TagKey设置为控件的主标记(div、table或其他标记)。
然后重写AddAttributesToRender()以设置 Package 器标记上所需的属性。
Package 标签中所需的内容应该通过重写RenderContents()方法来呈现。
CompositeControl继承自WebControl。请参阅有关TagKey和AddAttributesToRender()here用户的讨论。
有人在GeeksWithBlogs上写了一个类似的问题here
不过,要去掉 Package ,请参见forum post,它显示了一种重写控件构造函数以及RenderBeginTag和RenderEndTag方法以删除 Package 标记的方法。

cetgtptt

cetgtptt2#

使用RenderBeginTag。“RenderBeginTag”调用另一个方法,“AddAttributestoRender”方法,来处理所有类型的“属性”,这些属性只与开始标记相关。“TagKey”对应于默认的HTML标记,这些标记对应于Web控件。如果我们在“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);
}
jk9hmnmh

jk9hmnmh3#

你可以重写Render()方法,强制它只呈现内容,也许类似下面的方法就可以了:

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

相关问题