在FooterTemplate / Panel / SecurePanel / Div中使用时,Label不起作用

时间:2013-02-27 13:46:58

标签: asp.net label

运行Site_materials表,找到的所有匹配项都将它们存储在'NumberOFDeliveries'中, 这是应该在屏幕上显示它们的标签的ID。

 //DELIVERIES
        int NumberOfDeliveries = (from Deliveries in db.Site_Materials
                              where Deliveries.Diary_Entry_Id == this.DiaryEntryId
                              select Deliveries).ToList().Count();
        if (NumberOfDeliveries > 0)
        {
            NoOfDeliveriesOnSite.Text = System.Convert.ToString(NumberOfDeliveries);
        }
        else
        {
            NoOfDeliveriesOnSite.Text = "0";
        }

如果我在我的aspx页面中使用以下标签,则按预期显示。但我有一个问题,试图在我想要的地方显示它...在FooterTemplate / Panel / SecurePanel / Div

<FooterTemplate>
                        <asp:Panel runat="server" ID="AllLinks" HorizontalAlign="Center" Width="600px" >
                            <mesh:SecurePanel runat="server" ID="EmployeeLink" CssClass="SmallBoxLink" WebMasters="true" Admins="true" Clients="true" Employees="true">
                                <div style="height:25px; margin-top:12px; margin-bottom:12px;">
    <asp:Label ID="Delivery" runat="server" Text="Deliveries=" /><asp:Label ID="NoOfDeliveriesOnSite" runat="server" />

正如我所说,这段代码工作正常并显示正确的数量(当在aspx页面上的差异处使用时)但是当我尝试将其显示在我想要的地方时我得到错误: 来自cs。页面说明'NoOfDeliveriesOnSite'不存在。

关于为什么

的任何想法

2 个答案:

答案 0 :(得分:2)

如果它在页脚中,则需要将控制号设置为-1。在这个例子中,我在页脚中有一个标签,我想要处理:

dim myLabel as label
myLable = myDataRepeater.Controls(myDataRepeater.Controls.Count - 1).FindControl("lableName")

如果您正在尝试在用户控件中找到控件,则可能需要添加notehr .FindControl方法即:

myLable = myDataRepeater.Controls(myDataRepeater.Controls.Count - 1).FindControl("lableName").findControls("anotherControl")

答案 1 :(得分:1)

你必须在他们所在的任何容器内找到控件。

您需要将此添加到您在问题中提供的代码示例上方,以便您对该变量的引用有效:

SecurePanel EmployeeLink = (SecurePanel)AllLinks.FindControl("EmployeeLink");
Label NoOfDeliveriesOnSite = (Label)EmployeeLink.FindControl("NoOfDeliveriesOnSite");

根据您FooterTemplate的所有内容(GridViewFormView等),您可能需要首先在其中找到“AllLinks”Panel同样。