2010-04-09 62 views
15

我想遍歷包含html表格的Repeater的內容,並使用每個單元格的內容。這對於標準的HTML組件來說工作得很好,但是當我嘗試使用一個控件時會爆炸。下面的代碼將打印第一個單元格的值「Item#1」,但在嘗試訪問第二個單元格的.InnerText時將拋出HttpException。錯誤如下:由於內容不是文字,因此無法獲得內部內容

Cannot get inner content of because the contents are not literal. 

我試圖通過在其他地方找到的解決方案使用RenderControl,失敗的原因有兩個: 1),它呈現的第一個單元格的整個HTML和2)它試圖以下列消息訪問第二小區時仍然炸燬了:

'LinkButton1' of type 'LinkButton' must be placed inside 
a form tag with runat=server 

有一種簡單的方法來獲得LinkBut​​ton的文字我後?中繼器代碼和C#可以在下面找到。

中繼代碼:

<asp:Repeater ID="Rep1" runat="server"> 
<HeaderTemplate> 
    <table id="Table1" class="data"> 
</HeaderTemplate> 
<ItemTemplate> 
    <tr id="Row" runat="server"> 
     <td>Item #1</td> 
     <td><asp:LinkButton ID="LinkButton1" OnClick="DoSomething" 
      Text="Item #2" runat="server" /></td> 
    </tr> 
</ItemTemplate> 
<FooterTemplate> 
    </table> 
</FooterTemplate> 

的C#:

foreach (RepeaterItem item in Rep1.Items) 
{ 
    HtmlTableRow row = item.Controls[0].FindControl("Row") as HtmlTableRow; 

    foreach (HtmlTableCell cell in row.Cells) 
    { 
     if (cell.InnerText != string.Empty) 
     { 
      Console.WriteLine(cell.InnerText); 
     } 
    } 
} 
+0

你能解決這個問題嗎?我迫切需要一個答案,因爲我得到和你一樣的錯誤。我甚至嘗試過使用System.Windows.Forms控件來解決這個問題,但沒有喜悅。 – Fandango68 2015-05-11 07:09:20

回答

2

迭代/遞歸通過控件集合任何子控件。當你到達一個葉節點(沒有孩子),然後訪問該控件的InnerText屬性。

15

對於誰比誰這裏到達:

你不能在Control除非其內容是文字,即沒有任何服務器控件或控制與runat="server"裏面是需要渲染

+0

您能舉一個更具體的例子來解決上述問題嗎?我有完全相同的問題。謝謝 – Fandango68 2015-05-11 07:08:08

+1

如果不重新設計控件以使其內容是字面意思,請刪除任何子控件runat =「server」 – katbyte 2015-07-16 21:24:58

+0

此外,顯然HTML註釋會被解析爲「不是字面控件」,即使它像「 ! - Comment - >'而不是'<% - Comment - %>'。這就是讓我在這裏。 – 2017-05-17 19:03:48

0

得到InnerHtmlInnerText字符串值=((文字)(cell.Controls [0]))。文本

+0

不會導致試圖將一個HTML控件轉換爲文字的轉換錯誤。不起作用。對不起 – Fandango68 2015-05-11 04:48:04

0

此外,請確保您沒有任何此類嘗試訪問另一個視圖控件,而在多視圖控件中激活另一個視圖控件時。

+0

歡迎來到stackoverflow!這並不能解答這個問題。請使用下面的評論框,一旦你有足夠的聲譽,你將能夠評論任何帖子。 :) – 2017-06-20 04:29:43