2010-03-02 67 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的控件,所以不管是否需要檢查該類型的控件以確保它們也能到達目的地。