2010-03-02 308 views
0

我发现这篇文章介绍了如何操作asp.net控件的渲染顺序。http://weblogs.asp.net/infinitiesloop/archive/2007/09/07/rendering-asp-net-controls-out-of-order.aspx 我在页面上放置了一些占位符来封装我想要移动的控件。问题是,RenderChildren确实令控制器无我放入占位符这样的HTML:更改控件的渲染顺序

<asp:PlaceHolder id="phOneToMove" Runat="server" Visible="true"> 
<tr> 
<td><asp:Literal id="label1" Runat="server">Caption</asp:Literal></td> 
<td> 
<asp:TextBox ID="textbox1" runat="server"></asp:TextBox> 
</td> 
<td> 
<asp:RequiredFieldValidator ID="validator1" Enabled="true" ControlToValidate="textbox1" runat="server" EnableClientScript="False" ErrorMessage="error"></asp:RequiredFieldValidator> 
</td> 
</tr> 
</asp:PlaceHolder> 

的控件没有trtd周围渲染。 我该如何处理?我想要的只是改变占位符的顺序,例如phOneToMove

注意:我在asp.net 2.0上运行。

+0

显示渲染方法。 ​​等被ASP.NET转换为Label控件。如果您只渲染明确知道的控件,则会错过这些tr/td。 – Timores 2010-03-02 15:32:45

+0

不,如果我使用博客帖子中的示例,它甚至无法工作: private void RenderReverse(HtmlTextWriter writer){int i = Controls.Count-1; i> = 0; i--){ 控件[ I] .RenderControl(作家); } } – Uwe 2010-03-02 15:41:42

+0

什么是非工作结果? – Timores 2010-03-02 15:43:22

回答

0

我找到了解决方案。我的问题是,文字html元素(不是LiteralControls)不在我的usercontrol的Controls属性中。我不知道为什么。所以我开始调试.net Framework代码本身,并且没有开销地设置一个项目。

短:我在ascx文件本身的代码,如<b><%= myOutputVariable %></b>。这导致asp不会将文件的文字内容放入控件集合中。我删除了这段代码后,它就像预期的那样工作

0

HTML标签被存储为文字或LiteralControl的控件,所以不管是否需要检查该类型的控件以确保它们也能到达目的地。