为什么这适用于lblFlagged:
<asp:Label ID="lblFlagged" runat="server" Text="x" />
<table>
<tr>
<td><asp:Label ID="lblCurrUser" runat="server" Text="MyText" Visible="false"></asp:Label></td>
</tr>
<tr>
<td><h1><asp:Label ID="lblMailbox" runat="server" style="color:cornflowerblue; font-size:x-large; font-weight:bold" Text="MyText"></asp:Label></h1></td>
</tr>
<tr>
<td>
<asp:UpdatePanel ID="SearchPanel" runat="server">
<ContentTemplate>
<asp:Repeater ID="MailRepeater" runat="server" onitemcommand="MailRepeater_ItemCommand" OnItemDataBound="MailRepeater_DataBinding">
<HeaderTemplate>
<table>
<tr style="height:7px">
<td style="width:95px">
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</td>
<td style="width:110px">
<asp:Label ID="lblFromH" runat="server" Text="From"></asp:Label>
</td>
等...
这不是:
<table>
<tr>
<td><asp:Label ID="lblCurrUser" runat="server" Text="MyText" Visible="false"></asp:Label></td>
</tr>
<tr>
<td><h1><asp:Label ID="lblMailbox" runat="server" style="color:cornflowerblue; font-size:x-large; font-weight:bold" Text="MyText"></asp:Label></h1></td>
</tr>
<tr>
<td>
<asp:UpdatePanel ID="SearchPanel" runat="server">
<ContentTemplate>
<asp:Repeater ID="MailRepeater" runat="server" onitemcommand="MailRepeater_ItemCommand" OnItemDataBound="MailRepeater_DataBinding">
<HeaderTemplate>
<table>
<tr style="height:7px">
<td style="width:95px">
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</td>
<td style="width:110px">
<asp:Label ID="lblFlagged" runat="server" Text="From"></asp:Label>
</td>
等...
(请注意,在第一个示例中,它位于第一行,而在第二个示例中,它位于最后一行)
请注意,特别是标签“lblFlagged”。在第一种情况下,如果我喜欢,我可以在代码隐藏中设置该值。在第二种情况下,它在代码隐藏中以红色加下划线,告诉我“它在当前上下文中不存在”。第二个例子中的designer.cs文件也缺少它。
这是否与UpdatePanel有关?有办法吗?
答案 0 :(得分:0)
lblFlagged
已移至转发器内部,这使得您的Page或Control无法直接访问它,因为转发器数据源中的每个项目现在都有一个标签。
使用RepeaterItem.FindControl()在转发器项目循环或OnItemDataBound
事件等位置查找控件。
protected void MailRepeater_DataBinding(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
var lbl = (Label)e.Item.FindControl("lblFlagged");
lbl.Text = "Hello world";
}
}