tl:dr版本:
有没有办法让面板在由RenderControl呈现时呈现为div?
背景:
我正在处理一个JSON1.1站点,我正在尝试将一个包含面板的控件呈现为一个字符串,这样我就可以将它作为asp.net传递回页面并刷新页面的一部分。
因此,我将呈现控件:
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">而不是面板来解决这个问题,最终这可能是最好的解决方案,但在这一点上,我非常好奇是否有一种方法可以让面板做我想要的事情。
发布于 2010-07-23 05:50:48
在我看到Yellowfog的答案之前,我继续尝试使用服务器端div而不是面板。具有讽刺意味的是,我实际上使用的是一个继承自面板的类,它恰好被称为MyPanel:不确定这是否会为Yellowfog赢得一个通灵徽章,或者是一个令人毛骨悚然的徽章:)。我不想采用这种方法的主要原因是因为我没有编写MyPanel类,并且不想因为继承自HtmlGenericControl而不是Panel而不得不处理对它的任何更改。但转换过程相当轻松,而且效果很好。
读完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
}这也很有效。
发布于 2010-07-22 23:14:32
我想要做的是创建一个继承自面板的类(比如MyPanel ),用它代替面板,并覆盖MyPanel中的Render方法来做我想做的事情。
https://stackoverflow.com/questions/3310395
复制相似问题