有没有办法在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?
当我第一次查看问题时,我认为这可能是一个浏览器问题,但是当我查看web.config时,我看到我们已经根据此网站设置了browsercaps:http://slingfive.com/pages/code/browserCaps/
我认为我可以通过使用<div runat="server">
而不是面板来解决这个问题,最后这可能是最好的解决方案,但在这一点上我很好奇是否有办法获得面板做我想做的事。
答案 0 :(得分:1)
我倾向于创建一个继承自Panel(MyPanel,比如说)的类,使用它代替Panel并覆盖MyPanel中的Render方法来做我想做的事。
答案 1 :(得分:1)
在我看到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
}
这也很有效。