代码隐藏中标签引用的适当位置

时间:2015-07-06 15:12:45

标签: c# asp.net

为什么这适用于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有关?有办法吗?

1 个答案:

答案 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";
    }
}
相关问题