ASP如何在母版页的子页面上查找类型控件

时间:2014-03-02 22:30:03

标签: c# panel

我有一个母版页master.page。

我有一个子页面default.aspx,即inheirts master。

如何执行以下操作并实际查找控件。在下面的代码中,我从未找到我的面板。

codebehind - content-page

foreach (Panel pnl in this.Page.Controls.OfType<Panel>())
{
    if (pnl.ID.ToUpper() == texthi.ToUpper().Replace(" ", ""))
    {
        pnl.Visible = true;
    }
    else
    {
        pnl.Visible = false;
    }
}

aspx - content-page

<%@ Page Title="" Language="C#" MasterPageFile="~/secure/Wizard.master" AutoEventWireup="true"
    CodeFile="AddWarranty.aspx.cs" Inherits="secure_Warranties_AddWarranty" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder_NavigationPanel"
    runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:ScriptManager runat="server" ID="sm1">
    </asp:ScriptManager>
    <div id="header">
        <p id="layoutdims">
        </p>
    </div>
    <div class="colmask leftmenu">
        <div class="colleft">
            <div class="col1">
                <asp:Panel runat="server" ID="VehicleInformation" Visible="true">
                    <legend>VEHICLE INFORMATION</legend>
                </asp:Panel>
                <asp:Panel runat="server" ID="CustomerInformation" Visible="false">
                    <legend>CUSTOMER INFORMATION</legend>
                </asp:Panel>
            </div> 

1 个答案:

答案 0 :(得分:0)

原因是Enumerable.TypeOf看起来不是递归到子控件而只是顶级容器。由于您在页面ControlCollection上使用它,因此您只能找到位于页面顶部的面板。但是你的面板在其他div中。

让父div(使用class="col1"runat=server(或使用Panel)并在代码隐藏中访问它:

foreach (Panel pnl in div.Controls.OfType<Panel>())
{  
    // ...
}