2010-08-25 9 views
4

pourquoi je ne peux pas accéder à littéral derrière Code de ma page asp.net?Littéral dans le code derrière

<%@ Page Title="" Language="VB" MasterPageFile="~/UI/Masters/Window.master" AutoEventWireup="false" CodeFile="HelpViewer.aspx.vb" Inherits="UI_Pages_HelpViewer" culture="auto" meta:resourcekey="PageResource1" uiculture="auto" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="c" Runat="Server"> 
<%--<div dir="rtl"> 
    <asp:Panel ID="Panel1" Height="270px" Width="100%" ScrollBars="Auto" 
     runat="server" meta:resourcekey="Panel1Resource1"> 
     <asp:Literal ID="Literal1" runat="server" meta:resourceKey="Literal1Resource1"></asp:Literal> 
</asp:Panel> 
</div>--%> 

<div dir="rtl" align="right"> 
     <asp:Repeater ID="rptHelp" runat="server" DataSourceID="xmlHelp"> 
      <ItemTemplate> 
       <div style ="font-size:12px; font-family :Tahoma; font-weight:bold; margin-left:5px; color:Green; "> 
         <asp:Literal ID="ltlTitle" runat="server" Text='<%#XPath("title")%>'></asp:Literal> 
       </div> 
       <div style="font-size:11px;margin-bottom:10px; margin-left:12px; margin-right:4px; font-family:Tahoma ; margin-top:9px;"> 
        <asp:Literal ID="ltlText" runat="server" Text='<%#XPath("text")%>'></asp:Literal> 
       </div> 
      </ItemTemplate> 
     </asp:Repeater> 
     <asp:XmlDataSource ID="xmlHelp" runat="server"></asp:XmlDataSource> 
    </div> 
</asp:Content> 

ltlText est un élément inconnu derrière le code.

+0

mon grand problème dans ce site est que je ne peux pas utiliser la syntaxe surligneur :( et Modérateurs avait toujours modifier mes questions :( – Shahin

+1

@shaahin , pour formater votre code, sélectionnez votre extrait de code et appuyez sur Ctrl + K, ou laissez simplement 4 espaces au début de chaque ligne.Assurez-vous également de lire ceci: http://stackoverflow.com/editing-help –

+1

@shaahin Il suffit de lire la syntaxe du markdown: http://stackoverflow.com/editing-help, il est assez facile à comprendre – XIII

Répondre

6

ltlText est inconnu directement car il réside dans un contrôle contenant: votre répéteur. Si vous voulez y accéder, vous devez parcourir les lignes du répéteur, par exemple dans le ItemDataBound event et utiliser la méthode FindControl pour trouver votre littéral. Regardez le code exemple dans la documentation MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx.

Le code que vous êtes après pourrait ressembler à ceci:

rptHelp_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 

     Literal lt = (Literal)e.Item.FindControl("ltlText"); 
     lt.Text = "Test"; 
    } 
} 
4

En effet, le littéral est à l'intérieur d'un répéteur. Il est possible que plusieurs instances soient créées à l'aide du modèle que vous fournissez, donc le fait de simplement y faire référence par nom ne fonctionnera pas.

Utilisez quelque chose comme:

Literal ltlText = (Literal)rptHelp.Items[0].FindControl("ltlText"); 
// Do stuff with literal 

Désolé, pas assez éveillé pour se convertir à la syntaxe VB en ce moment, mais nous espérons que vous avez l'idée. Plutôt que d'accéder à ces éléments, vous voudrez probablement exécuter votre code pendant que le répéteur fonctionne, par exemple dans le gestionnaire d'événements OnItemDataBound de votre contrôle.

Un peu plus du code C# d'un gestionnaire d'événements par exemple:.

protected void rptHelp_OnItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
    { 
     // In this example, the repeater's data source is a DataTable, 
     // so each item corresponds to a DataRow 
     DataRow row = e.Item.DataItem as DataRow; 
     Literal ltlText = (Literal)e.Item.FindControl("ltlText"); 
     // Set literal based on data here 
    } 
} 
Questions connexes