Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类中的MasterPage.FindControl_C#_Asp.net - Fatal编程技术网

C# 类中的MasterPage.FindControl

C# 类中的MasterPage.FindControl,c#,asp.net,C#,Asp.net,我试图在内容页的母版页访问中找到一个控件,确切地说是一个图像按钮。以下是母版页html代码: <body> <form id="form1" runat="server"> <div class="navLeft"> <br /> <asp:ImageButton ID="imgbtnMooring" runat="server" Height="

我试图在内容页的母版页访问中找到一个控件,确切地说是一个图像按钮。以下是母版页html代码:

<body>
    <form id="form1" runat="server">
    <div class="navLeft">
        <br />           
        <asp:ImageButton ID="imgbtnMooring" runat="server" 
            Height="60px" ImageUrl="~/Item/RibbonIcon/Dashboard.png" />
        <br />
    </div>
    <div class="navTop">            
    </div>
    <div class="banner">
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    <div class="divider">
        <asp:ContentPlaceHolder id="ContentPlaceHolder2" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    <div class="content">
        <asp:ContentPlaceHolder id="ContentPlaceHolder3" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
现在,我尝试创建一个名为GeneralClass的类文件,以便可以在任何内容页中访问上述代码。sql命令只是从服务器中提取YES/NO值,所以我认为这是一个可以忽略的问题

以下是GeneralClass类文件中的代码:

    MasterPage masterPage = new MasterPage();
    masterPage.MasterPageFile = "~/GeneralLayout.master";

    string validMooring = "";

    comm = new SqlCommand("SELECT * FROM dbo.StructureCurrent", conn);
    conn.Open();
    reader = comm.ExecuteReader();
    while (reader.Read())
    {
        validMooring = reader["StructureMooring"].ToString();
    }

    switch (validMooring)
    {
        case "YES":
            (masterPage.FindControl("imgbtnMooring") as ImageButton).Enabled = true;
            (masterPage.FindControl("imgbtnMooring") as ImageButton).ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            (masterPage.FindControl("imgbtnMooring") as ImageButton).Enabled = false;
            (masterPage.FindControl("imgbtnMooring") as ImageButton).ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }
但不知何故,该行(masterPage.FindControl(“imgbtn”)作为ImageButton)返回空值


有人能帮我解决这个问题吗?

您可以使用页面扩展方法,因为我怀疑您的代码找不到控件

Master.cs:

private void Page_Load(object sender, System.EventArgs e)
{
  this.EnableControls(null);
}
在GeneralClass类文件中添加以下名称空间:

using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

public static void EnableControls(this Page page, ControlCollection ctrl)
{
    if (ctrl == null)
        ctrl = page.Controls;

    string validMooring = "";

    comm = new SqlCommand("SELECT * FROM dbo.StructureCurrent", conn);
    conn.Open();
    reader = comm.ExecuteReader();
    while (reader.Read())
    {
      validMooring = reader["StructureMooring"].ToString();
    }

    foreach (Control item in ctrl)
    {
        if (item.Controls.Count > 0)
            EnableControls(page, item.Controls, isEnable);

        if (item.GetType() == typeof(ImageButton))
        {
            switch (validMooring)
            {
              case "YES":
                ((ImageButton)item).Enabled = true;
                ((ImageButton)item).ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
                 break;

              case "NO":
                ((ImageButton)item).Enabled = false;
                ((ImageButton)item).ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
                break;
            default:
                break;
        }

    }
}

我发现要做的事情是在母版页上找到控件,并使用服务器的YES/NO值启用/禁用按钮。下面是我使用的代码。与我在问题中为一个图像按钮发布代码不同,为了更好地理解,我将为两个图像按钮发布代码。此代码用于我的“GeneralClass”类文件

public void validNavLeft()
{
    string validHull = "", validMooring = "";

    comm = new SqlCommand("SELECT * FROM dbo.StructureCurrent", conn);
    conn.Open();
    reader = comm.ExecuteReader();
    while (reader.Read())
    {
        validHull = reader["StructureHull"].ToString();
        validMooring = reader["StructureMooring"].ToString();
    }

    var pageHandler = HttpContext.Current.CurrentHandler;
    Control ctrlHull = ((Page)pageHandler).Master.FindControl("imgbtnHull");
    ImageButton imgBtnHull = (ImageButton)ctrlHull;
    Control ctrlMooring = ((Page)pageHandler).Master.FindControl("imgbtnMooring");
    ImageButton imgBtnMooring = (ImageButton)ctrlMooring;

    switch (validHull)
    {
        case "YES":
            imgBtnHull.Enabled = true;
            imgBtnHull.ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            imgBtnHull.Enabled = false;
            imgBtnHull.ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }
    switch (validMooring)
    {
        case "YES":
            imgBtnMooring.Enabled = true;
            imgBtnMooring.ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            imgBtnMooring.Enabled = false;
            imgBtnMooring.ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }
}

我的意思是,这是一个多图像按钮的炒锅,其中每个图像按钮都有自己的验证,就像本例中的validMooring。从你的代码中我可以理解,它只能用于多个图像按钮,但有1个验证。
public void validNavLeft()
{
    string validHull = "", validMooring = "";

    comm = new SqlCommand("SELECT * FROM dbo.StructureCurrent", conn);
    conn.Open();
    reader = comm.ExecuteReader();
    while (reader.Read())
    {
        validHull = reader["StructureHull"].ToString();
        validMooring = reader["StructureMooring"].ToString();
    }

    var pageHandler = HttpContext.Current.CurrentHandler;
    Control ctrlHull = ((Page)pageHandler).Master.FindControl("imgbtnHull");
    ImageButton imgBtnHull = (ImageButton)ctrlHull;
    Control ctrlMooring = ((Page)pageHandler).Master.FindControl("imgbtnMooring");
    ImageButton imgBtnMooring = (ImageButton)ctrlMooring;

    switch (validHull)
    {
        case "YES":
            imgBtnHull.Enabled = true;
            imgBtnHull.ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            imgBtnHull.Enabled = false;
            imgBtnHull.ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }
    switch (validMooring)
    {
        case "YES":
            imgBtnMooring.Enabled = true;
            imgBtnMooring.ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            imgBtnMooring.Enabled = false;
            imgBtnMooring.ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }
}