【问题标题】:Rendering of asp.net controlsasp.net 控件的渲染
【发布时间】:2011-03-10 10:15:47
【问题描述】:

我发现在使用 asp.net 控件时很难制作正确的 css 文件,因为我不知道不同控件的 html 输出最终会是什么。

例如,如果我想使用asp.net控件添加div标签,要知道我可以使用哪种控件并不容易。

是否有任何文档显示每个 asp.net 控件,该控件呈现的 html 将是什么?我知道某些控件可能会由于其配置方式而改变其输出,但大多数控件至少会遵循此处的模式。

最好的当然是网络上的服务,您可以在其中放入 asp.net 控件定义并获取呈现的 html。

目前我必须将一个控件放入我的网络表单中,运行它并在浏览器中检查源代码,如果它不是正确的 html 标签,请尝试另一个控件并重复。这很快就会变得乏味。

【问题讨论】:

  • 我通常会使用反射器来挖掘控件或使用 cssfriendly 适配器,但这样的东西会很方便
  • 渲染的 html 甚至会因浏览器而异,例如,当 ASP.Net 认为客户端使用“较低”浏览器(BrowserCaps)时,Panel 将是 rendered as Table 而不是分区。
  • 如果您想要div,请使用div。最近没有做太多的 WebForms,但我总是试图让我的 ASP.NET 控件使用表单元素和PlaceHolder 控件来显示和隐藏内容。我总是更喜欢Repeater,而不是任何其他面向数据的控件,它可以让您最大限度地控制渲染的标记。每次你使用GridView,一只小猫不仅会死,还会被折磨到缓慢而痛苦的死亡。
  • 正如 roryf 所说,如果你想要 <div>,请使用 <div>。你为什么要把事情复杂化?您应该更改 css 以适应您的代码,而不是相反。
  • @roryf 和@another - 情况是我根据很多因素动态创建页面,所以我从代码生成控件(因此也是 html)。目前我正在使用 HtmlGenericControl 创建 div 标签,并使用 HtmlGenericControls Controls 属性在 div 标签内添加内容。这是首选的方式,还是有更好/更简单的方式来完成这个?

标签: asp.net html


【解决方案1】:

如果您想知道服务器控件呈现给哪些 html 控件,您可以调用RenderControl

Dim myGridView as new GridView
Dim sb as New StringBuilder()    
Dim sw as New IO.StringWriter(sb)
Dim textWriter as New HtmlTextWriter(sw)
myGridView.RenderControl(textWriter)
' now we can have a look what asp.net has rendered: '
Dim gridViewHTML as String = sb.ToString()

呈现的 html 甚至会因浏览器而异,例如,当 ASP.Net 认为客户端使用“较低”浏览器 (BrowserCaps) 时,Panel 将是 rendered as Table 而不是 DIV。

顺便说一句,如果你在页面内的控件上测试我上面的代码,你必须覆盖 VerifyRenderingInServerForm 否则你会得到一个 "...必须放在带有 runat= 的表单标签内服务器”-错误:

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
   Return
End Sub

【讨论】:

  • +1:我实际上从 cmets 那里得到了更多帮助,但是这个回答了我最初的问题,我会将其标记为已接受 :)
【解决方案2】:

我建议向您的 WebControls 添加一个 CssClass,并使用类而不是 HTML 元素类型来进行所有样式设置。正如 Tim Schmelter 所说,html 可以针对不同的客户端以不同的方式呈现(我似乎记得 Panel 在某些情况下也可以是 span)。

为避免每次都必须添加 CssClass,您可以对所需的 WebControl 进行子类化,然后在 Control_Init 中将其设置为 CssClass。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多