【问题标题】:asp.net custom server control design time supportasp.net 自定义服务器控件设计时支持
【发布时间】:2010-01-11 13:07:25
【问题描述】:

我在设计视图中遇到了自定义面板控件的问题。覆盖渲染方法在设计时没有影响。

如果我按如下方式扩展文本框,则设计时会显示 div 标记,然后显示文本框控件。对面板控件进行了同样的尝试,但它没有显示带有此处文本的 div。似乎因为面板是一个容器控件,它在设计视图中的工作方式不同。真令人沮丧。关于如何让我的设计时间以我想要的方式呈现的任何想法?

Public Class textboxextend
  Inherits TextBox

  Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    writer.RenderBeginTag("div")
    writer.Write("here")
    writer.RenderEndTag()
    MyBase.Render(writer)
  End Sub
End Class

Public Class panelextend
  Inherits Panel

  Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    writer.RenderBeginTag("div")
    writer.Write("here")
    writer.RenderEndTag()
    MyBase.Render(writer)
  End Sub
End Class

【问题讨论】:

  • 仅供参考,尝试调试扩展的 Panel 类,当在设计时添加组件时,它不会触发任何常见事件(RenderControl、Render、RenderChildren、RenderContents、CreateChildControls、OnLoad 或 OnPreRender)。 .. 但是它确实调用了 OnInit,这无济于事,因为所有控件都已创建并在 New() 处添加到 Panel 的 Controls 集合中。这似乎只影响扩展 Panel 类,在扩展 TextBox 或 TreeView 时工作正常类等...换句话说,我也在寻找答案:(

标签: asp.net custom-server-controls


【解决方案1】:

面板与 TextBox(和大多数控件)的工作方式不同。没有 Render 方法,因此永远不会调用覆盖。面板使用 RenderBeginTag 和 RenderEndTag。 您可能也想使用 AddAttributesToRender 方法。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多