我正在尝试从我的代码隐藏文件中访问asp转发器中的asp标签。这是我到目前为止所做的:
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource1" OnItemDataBound="outerFunction">
<HeaderTemplate>
<h1>Questions And Answers</h1>
</HeaderTemplate>
<ItemTemplate>
<p style="background-color:Red; color:Yellow;"><%#Eval("QText") %> :::::::::</p>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# setQID(Eval("QID"))%>' />
<asp:Label ID="pageLabel" runat="server" Text="Label"></asp:Label>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="LinqDataSource2">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<%# (GetAnswer(Eval("AnsQID"))) != 1 ? (displayAnswer(Eval("AText"))) : ""%>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
<span style="display:block; border-top:1px solid Gray;"></span>
</ItemTemplate>
</asp:Repeater>
* 这是我的代码*
public void outerFunction(object sender, RepeaterItemEventArgs e)
{
Label myLabel = (Label) e.Item.FindControl("pageLabel");
myLabel.Text = "HELLO World";
}
我正在尝试显示问题和答案。对于每个问题,可以有多个答案。这就是我在嵌套转发器控件中拥有它的原因。现在我只需要知道我怎么能说,例如在外部转发器中有一个“div”元素,并将内部转发器内的每个答案绑定到该父div。
谢谢!
答案 0 :(得分:9)
您的代码看起来不错,除非您没有检查您所在行的类型:
public void outerFunction(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
{
Label myLabel = (Label) e.Item.FindControl("pageLabel");
myLabel.Text = "HELLO World";
}
}
答案 1 :(得分:1)
由于您的标题模板不包含“pageLabel”,因此当转发器的该部分是数据绑定时,您将收到空引用错误。
将标签部分放在if块中:
if (e.Item.ItemType == ListItemType.Item)
{
...
}
如果您使用AlternatingItemTemplate,您还需要包含:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
...
}
答案 2 :(得分:0)
当前处理的项目是页眉或页脚时,您现在正在做的方式并不安全,标签位于ItemTemplate
中,因此仅适用于DataItems,请尝试这样:
public void outerFunction(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Label myLabel = (Label) e.Item.FindControl("pageLabel");
myLabel.Text = "HELLO World";
}
}