2010-08-25 2 views
4

Почему я не могу получить доступ к буквальному за коду моей страницы asp.net?Литерал в коде за

<%@ 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 - неизвестный элемент за кодом.

+0

моя большая проблема в этом месте является то, что я не могу использовать подсветку синтаксиса :( и Модераторы всегда редактировать свои вопросы :( – Shahin

+1

@shaahin , чтобы отформатировать ваш код, выбрать фрагмент кода и нажать «Ctrl + K» или просто оставить 4 пробела в начале каждой строки. Также убедитесь, что вы читаете это: http://stackoverflow.com/editing-help –

+1

@shaahin. Просто прочитайте синтаксис уценки: http://stackoverflow.com/editing-help. Это довольно легко понять. – XIII

ответ

6

ltlText неизвестен напрямую, так как он живет в контроле: ваш ретранслятор. Если вы хотите дойти до него, вам нужно перебирать строки ретранслятора, например, в ItemDataBound event и использовать метод FindControl для поиска вашего литерала.

Посмотрите пример кода в документации MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx.

код вы после может выглядеть примерно так:

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

Это происходит потому, что в буквальном смысле находится внутри Repeater. Возможно, несколько экземпляров его создаются с помощью шаблона, который вы предоставляете, поэтому просто ссылаться на него по имени не будет работать.

использовать что-то вроде:

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

К сожалению, не достаточно просыпаются, чтобы преобразовать синтаксис VB прямо сейчас, но, надеюсь, вы поняли идею.

Вместо того, чтобы обращаться к таким элементам, вы, вероятно, захотите выполнить свой код, пока ретранслятор выполняет свою работу, например, в обработчике событий OnItemDataBound вашего элемента управления.

Некоторые более C# код обработчика событий Пример:.

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 
    } 
} 
Смежные вопросы