为什么我无法在我的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 :(得分: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";
}
}
答案 1 :(得分: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
}
}