MasterPage .FindControl 在类中

2024-04-08

我尝试在从内容页面访问母版页时找到一个控件,确切地说是一个图像按钮。以下是母版页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>

当我将以下代码放入内容页 aspx.cs 文件中时,我成功地做到了这一点

    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":
            (Page.Master.FindControl("imgbtnMooring") as ImageButton).Enabled = true;
            (Page.Master.FindControl("imgbtnMooring") as ImageButton).ImageUrl = "~/Item/RibbonIcon/Dashboard.png";
            break;
        case "NO":
            (Page.Master.FindControl("imgbtnMooring") as ImageButton).Enabled = false;
            (Page.Master.FindControl("imgbtnMooring") as ImageButton).ImageUrl = "~/Item/RibbonIcon - Grey/DashboardGrey.png";
            break;
        default:
            break;
    }

现在我尝试制作一个名为 GeneralClass 的类文件,以便可以在任何内容页面中访问上述代码。 sql 命令只是从服务器中提取“是/否”值,所以我认为对于我的问题可以忽略它。

以下是 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("imgbtnMooring") as 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;
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MasterPage .FindControl 在类中 的相关文章

随机推荐

  • 获取满足特定条件的数组项的计数

    我有一个名为 friend comparisons 的数组 其中填充了许多用户对象 然后我使用以下命令对数组进行排序 friend comparisons sort a b b completions where list id gt li
  • 按小时将日期时间对象排序到 Pandas 数据框,然后使用 Matplotlib 可视化为直方图

    我需要按小时对观看者进行直方图排序 我有一些使用 Matplotlib 来做到这一点的经验 但是我不知道按小时对日期进行排序的最实用的方法是什么 首先 我从 JSON 文件中读取数据 然后将两种相关的数据类型存储在 pandas Dataf
  • 如何在 Windows 上的 nvidia GPU 的 Visual Studio 2010 中配置 OpenCL?

    我在华硕笔记本电脑上的 Wwindows 7 操作系统上使用 NVIDIA GeForce GTX 480 GPU 我已经为 CUDA 4 2 配置了 Visual Studio 2010 如何在 Visual Studio 2010 上为
  • “Java Date() 返回 UTC 日期” - 它实际上是什么意思?

    我的问题可能很微不足道 但我只是想寻求澄清 我在 SO 中读到 Java 的 Date 实际上总是采用 UTC 时间 为什么当我创建 Date 对象并使用 toString 打印它时 它显示本地时间 如果这不是正确的打印方式 那么应该使用什
  • MySQL 中的乐观锁

    我在 MySQL 中找不到任何有关乐观锁定的详细信息 我读到 启动事务可以使两个实体的更新保持同步 但是 它不会阻止两个用户同时更新数据 从而导致冲突 显然乐观锁定可以解决这个问题 这在 MySQL 中是如何应用的 有相关的 SQL 语法
  • JTree 节点的可更改工具提示

    我有一个 JTree 其中填充了一些 自定义 节点 我有一个类 它是 DefaultTreeCellRenderer 的子类 使用 MyTreeCellRenderer 我可以为树中的每个节点设置工具提示 它工作正常 JTree 已填充 单
  • System.Data.IDbCommand 和异步执行?

    系统 Data SqlClient SqlCommand 有方法 BeginExecuteNonQuery BeginExecuteReader BeginExecuteXmlReader and EndExecuteNonQuery En
  • 如何配置本地 Jetty ssl 以避免弱 phermeral DH 密钥错误?

    我正在使用 keytool 生成密钥库来配置本地开发码头来运行 ssl keytool exe keystore jetty keystore alias jetty genkey keyalg RSA sigalg SHA256withR
  • 堆积条形图的悬停不起作用

    我正在检查 Flot 中的堆积图表 并在条形图中发现了一些奇怪的东西 我尝试使用这个 http jsfiddle net zNXBd 41 http jsfiddle net zNXBd 41 在此示例代码中 尝试将鼠标悬停在堆叠线上 悬停
  • AnyObject 尝试转换为 Equatable

    我有一个Equatable class class Item Equatable var value AnyObject var title String init title String value AnyObject self tit
  • 何时使用 IOC 容器?

    我试图了解何时应该使用容器而不是手动注入依赖项 如果我有一个使用 1 2 个接口的应用程序 并且每个接口只有 1 2 个具体实现 我会倾向于自己处理 如果我有一个使用 2 3 个接口的小型应用程序 并且每个接口有 2 3 个具体实现 我应该
  • 删除 woocommerce 完整或基于订单元处理电子邮件

    我正在尝试根据某些订单元删除处理 或完整 电子邮件 我正在使用 POS 系统并让客户通过客户发票电子邮件付款 初始订单状态为待付款 我想 a 测试是否使用 pos 下订单 b 删除 正在处理 或 完成 电子邮件 我似乎无法让 if 语句逻辑
  • 由于找不到资源“solrconfig.xml”而无法创建新的 Solr 核心

    我刚刚安装了 Solr 并想创建一个新的核心 但出现此错误 org apache solr common SolrException Error CREATEing SolrCore new core Unable to create co
  • “查找”或任何其他工具可以广度优先搜索文件吗?

    有时我知道某个文件并不那么深 但是非常密集的子目录不允许我轻松找到我想要的文件 Can find http www gnu org software findutils manual html mono find html 或任何其他工具
  • 编译器如何知道 C++ constexpr 计算不会触发未定义的行为?

    C 标准mandates编译器要检查未定义的行为 in C constexpr 计算 In 这次演讲 https www youtube com watch v yG1OZ69H o Chandler Carruth 指出 在检查 UB 时
  • 如何在 ruby​​ 中保留我的浮点数

    所以我正在尝试一些代码将数字转换为字符串 但是 我注意到在某些情况下它不会保留最后两位小数 例如 我输入 1 01 和 1 04 进行加法 然后得到 2 04 如果我只输入 1 05 它会保留该数字并准确返回 我明白发生了什么事情正在四舍五
  • SAML 签名证书 - 哪种 SSL 证书类型?

    我们目前正在使用 SAML 2 0 开发 SSL 解决方案 到目前为止 一直使用自签名证书来签署 XML 请求 但是 当我们转向生产时 我们希望使用来自证书颁发机构的证书 但我不太确定要购买什么类型的证书 因为它们都是以网站为中心的 例如单
  • QT:如何每秒循环一个方法? C++

    我创建了一个 Qt 项目 它在小部件上显示一个圆圈 然后我有一个方法 每次调用该方法时都会在不同位置重新绘制圆 我想要的是在 for 循环中运行该方法 比如说十次 并显示每秒重绘圆圈的 10 个位置 大致如下 void method pai
  • 在 Android 中添加地理围栏时出错(状态代码 1000)

    我收到错误onAddGeofencesResult int statusCode String geofenceRequestIds 回调与statusCode 1000 我启用了 GPS 和 WiFi 我还有 Google Play 服务
  • MasterPage .FindControl 在类中

    我尝试在从内容页面访问母版页时找到一个控件 确切地说是一个图像按钮 以下是母版页html代码