【问题标题】:How to make an asp:panel render as a div via .RenderConrol如何通过 .RenderConrol 将 asp:panel 渲染为 div
【发布时间】:2010-07-22 15:09:09
【问题描述】:

tl:dr 版本:

有没有办法让 RenderControl 渲染面板时呈现为 div?

背景:

我正在开发一个 asp.net 1.1 站点,我正在尝试将包含面板的控件呈现为字符串,以便我可以将其作为 JSON 传递回页面并刷新页面的一部分。

我正在渲染控件:

StringWriter twHeader = new StringWriter();
Html32TextWriter HeaderWriter = new Html32TextWriter(twHeader);             
MyHeader.RenderControl(HeaderWriter);
HeaderWriter.Close();
string HeaderHtml = twHeader.ToString()

当导航到包含 MyHeader 控件的页面时,该控件中的面板将呈现为 div。但是,当我在 MyHeader 上调用 RenderControl 时,面板会呈现为表格,因此当使用 HeaderHtml 更新页面时,布局会爆炸。

有没有办法让 RenderControl 渲染面板时呈现为 div?

附加信息:

当我第一次查看问题时,我认为这可能是 browsercaps 问题,但当我查看 web.config 时,我发现我们已经按照此站点设置了 browsercaps:http://slingfive.com/pages/code/browserCaps/

我想我可以通过使用<div runat="server"> 而不是面板来解决这个问题,最终这可能是最好的解决方案,但此时我很好奇是否有办法让面板去做我想要什么。

【问题讨论】:

    标签: asp.net ajax json controls rendering


    【解决方案1】:

    我倾向于创建一个继承自 Panel 的类(例如 MyPanel),使用它代替 Panel 并覆盖 MyPanel 中的 Render 方法来做我想做的事。

    【讨论】:

      【解决方案2】:

      在看到 Yellowfog 的回答之前,我继续尝试使用服务器端 div 而不是 Panels。具有讽刺意味的是,我实际上是使用了一个继承自 Panel 的类,它恰好被称为 MyPanel:不确定这是否为 Yellowfog 赢得了通灵徽章,或者令人毛骨悚然的徽章 :)。我不想采用这种方法的主要原因是因为我没有编写 MyPanel 类,并且不想处理由于从 HtmlGenericControl 继承而可能需要对其进行的任何更改面板。但是切换非常轻松,而且效果很好。

      在阅读了 Yellowfog 的回答后,我想我也会考虑一下他的建议:

      public class MyPanel : Panel
      {
          //snip
      
          protected override void Render(HtmlTextWriter output)
          {
              output.Write("<div id=\"{0}\" class=\"{1}\"", this.ID, this.CssClass);
              this.RenderChildren(output);
              output.Write("</div>");
          }
      
          //snip
      }
      

      这也很有效。

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 1970-01-01
        • 2018-03-18
        • 1970-01-01
        • 2012-08-15
        • 2011-09-28
        • 1970-01-01
        • 2012-05-08
        • 2011-05-29
        相关资源
        最近更新 更多