2010-04-09 10 views
15

Sto tentando di ripetere il contenuto di un ripetitore contenente una tabella html e utilizzare il contenuto di ogni cella. Funziona bene per i componenti HTML standard, ma esplode quando provo a usare un controllo. Il codice seguente stamperà il valore della prima cella, "Articolo 1", ma genererà una HttpException quando tenterà di accedere a .InnerText della seconda cella. L'errore è la seguente:Impossibile ottenere il contenuto interno di "" perché il contenuto non è letterale

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

Ho provato ad utilizzare RenderControl tramite questa soluzione si trova altrove, che non è riuscito per due motivi; 1) che ha reso l'intera HTML della prima cella e 2) ancora fatto saltare in aria quando si cerca di accedere alla seconda cella con il seguente messaggio:

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

C'è un modo semplice per ottenere il testo LinkButton Sono dopo? Il codice del ripetitore e C# possono essere trovati sotto.

Il codice ripetitore:

<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> 

Il 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

Sei riuscito a risolvere questo problema per favore? Ho un disperato bisogno di una risposta, poiché ho gli stessi errori di te. Ho persino provato a utilizzare i controlli System.Windows.Forms per aggirare questo problema, ma non è una gioia. – Fandango68

risposta

2

Itera/recurse attraverso eventuali controlli figlio della collezione Controls. Quando si arriva a un nodo foglia (senza figli), accedere alla proprietà InnerText di quel controllo.

15

Per chiunque altro chi arriva qui:

Non è possibile ottenere InnerHtml o InnerText su un Control a meno che il suo contenuto sono letterali, cioè non ci sono controlli server o controlli con runat="server" al suo interno che richiesto il rendering

+0

Potresti fornire un esempio più specifico per risolvere il problema precedente? Sto avendo lo stesso esatto problema. Grazie – Fandango68

+1

Non è possibile risolvere il problema senza ridisegnare il controllo in modo che il suo contenuto sia letterale, rimuovere eventuali controlli secondari con runat = "server" – katbyte

+0

Inoltre, apparentemente un commento HTML viene analizzato come "non un controllo letterale", anche se è come '< ! - Commento -> 'invece di' <% - Commento -%> '. Questo è quello che mi ha portato qui. –

0

string value = ((Literal) (cell.Controls [0])). Testo

+0

No, questo causa un errore di cast che tenta di trasmettere un controllo HTML a un valore letterale. Non funziona. Scusa – Fandango68

0

Inoltre, assicurarsi di non avere nulla di simile a provare ad accedere a un altro controllo di visualizzazione mentre un altro controllo di visualizzazione è attivato in un controllo a più viste .

+0

Benvenuti nello stackoverflow !! Questo non fornisce una risposta alla domanda. Si prega di utilizzare la casella di commento qui sotto e una volta che si ha sufficiente reputazione si sarà in grado di commentare qualsiasi post. :) –

Problemi correlati