代码之家  ›  专栏  ›  技术社区  ›  MADCookie

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

  •  0
  • MADCookie  · 技术社区  · 16 年前

    我正在编写一个ASP.NET自定义复合控件(继承System.Web.UI.WebControl.CompositeControl)。

    默认情况下,“我的控件标记”渲染由标记包围。我知道我可以跳过属性TagKey,将return设置为System.Web.UI.HtmlTextWriterTag枚举中我想要的任何标记。

    我的问题是:我可以在没有.NET添加标记的情况下渲染控件吗?


    更新(2011年3月2日)感谢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
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   codeulike    16 年前

    使用CompositeControl可以去掉包含标记,但它的工作方式与CompositeControl喜欢的工作方式相反(见下文)

    然后重写AddAttributesToRender()以设置包装器标记上所需的属性。

    应该通过重写RenderContents()方法来呈现包装标记中所需的内容。

    CompositeControl继承自WebControl,请参阅TagKey和AddAttributesToRender()用户的讨论 here.

    here

    要想摆脱包装,请看这个 forum post 这显示了一种重写控件构造函数以及RenderBeginTag和RenderEndTag方法以移除包装标记的方法。

        2
  •  1
  •   McDowell rahul gupta    15 年前

    使用RenderBeginTag。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);
    }
    
        3
  •  0
  •   Jørn Schou-Rode dscher    16 年前

    Render() 方法,强制它仅呈现内容?也许像这样的事情会起作用:

    public override void Render(HtmlTextWriter writer)
    {
        RenderContents(writer);
    }
    
    推荐文章