2010-04-09 63 views
15

Tôi đang cố gắng lặp qua nội dung của Bộ lặp có chứa bảng html và sử dụng nội dung của mỗi ô. Điều này làm việc tốt cho các thành phần HTML tiêu chuẩn, nhưng thổi lên khi tôi cố gắng sử dụng một điều khiển. Mã dưới đây sẽ in giá trị của ô đầu tiên, "Item # 1", nhưng sẽ ném một HttpException khi cố gắng truy cập .InnerText của ô thứ hai. Lỗi này như sau:Không thể lấy nội dung bên trong của '' vì nội dung không phải là chữ số

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

Tôi đã cố gắng sử dụng RenderControl qua giải pháp này được tìm thấy ở nơi khác, không thành công vì hai lý do; 1) nó trả lại toàn bộ mã HTML của ô đầu tiên và 2) nó vẫn thổi lên khi cố gắng truy cập vào các tế bào thứ hai với thông báo sau:

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

Có một cách dễ dàng để có được những văn bản LinkButton Tôi sau? Mã lặp lại và C# có thể được tìm thấy bên dưới.

Mã lặp lại:

<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

Bạn có thể sửa lỗi này không? Tôi đang cần một câu trả lời tuyệt vọng, vì tôi nhận được các lỗi giống như bạn. Tôi thậm chí đã thử sử dụng các điều khiển System.Windows.Forms để giải quyết vấn đề này, nhưng không có niềm vui. – Fandango68

Trả lời

2

Lặp/recurse thông qua bất kỳ điều khiển con trong bộ sưu tập Controls. Khi bạn đến nút lá (không có con), hãy truy cập thuộc tính InnerText của điều khiển đó.

15

Đối với bất kỳ ai khác đến ở đây:

Bạn không thể nhận InnerHtml hoặc InnerText trên Control trừ khi nội dung của nó là theo nghĩa đen, tức là không có bất kỳ điều khiển máy chủ hoặc điều khiển với runat="server" bên trong nó mà yêu cầu render

+0

Bạn có thể đưa ra một ví dụ cụ thể hơn để khắc phục vấn đề trên không? Tôi gặp vấn đề chính xác như nhau. Cảm ơn bạn – Fandango68

+1

Bạn không thể sửa chữa nó mà không thiết kế lại điều khiển để nội dung của nó là chữ, xóa bất kỳ điều khiển con nào với runat = "server" – katbyte

+0

Ngoài ra, dường như một nhận xét HTML được phân tích là "không phải là kiểm soát bằng chữ", ngay cả khi nó giống như '< ! - Comment -> 'thay vì' <% - Comment -%> '. Đó là những gì đã cho tôi ở đây. –

0

string value = ((Literal) (cell.Controls [0])) Văn bản

+0

Không có nguyên nhân nào xảy ra lỗi truyền khi cố gắng truyền điều khiển HTML sang chữ. Không hoạt động. Xin lỗi – Fandango68

0

Ngoài ra, hãy chắc chắn rằng bạn không có bất cứ điều gì như vậy cố gắng truy cập điều khiển chế độ xem khác trong khi một điều khiển chế độ xem khác được kích hoạt trong điều khiển đa chế độ xem .

+0

Chào mừng bạn đến với stackoverflow !! Điều này không cung cấp câu trả lời cho câu hỏi. Vui lòng sử dụng hộp bình luận bên dưới và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào. :) –

Các vấn đề liên quan