- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在从内容页面访问母版页时找到一个控件,准确地说是一个图像按钮。以下是母版页 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 命令只是从服务器中提取 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("imgbtnMooring") as ImageButton) 返回空值。
谁能帮我解决这个问题?
最佳答案
您可以使用页面扩展方法,因为我怀疑您的代码无法找到控件。
Master.cs:
private void Page_Load(object sender, System.EventArgs e)
{
this.EnableControls(null);
}
在 GeneralClass 类文件中添加以下 NameSpaces:
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;
}
}
}
关于c# - MasterPage .FindControl类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37983174/
我有一个下拉列表: 一个可爱的小家伙。我有一些代码可以找到它: DropDownList myControl1 = (DropDownList)Page.FindC
我有一个列出客户项目的中继器,其中一个是用于获取更多信息的按钮。当用户单击该按钮时,用户控件会立即出现在它的下方。我希望用户控件在再次单击按钮时关闭。我最初切换可见性服务器端,但我现在不能使用它,因为
我的页面,Default.aspx 继承自 BasePage.cs。 在基本页面中,我试图找到实际上位于 Default.aspx 中的控件 Label1。 var labelControl = (T
我正在处理一个继承基页的页面。 aspx 页面包含一个控件,该控件使用 xslt 将 xml 文档转换为 html 标记。在该文档中,我使用了以下内容: 我正在尝
我正在设置一个 GridView ,以便我可以选择多个事件并将它们的 EventID 添加到逗号分隔的字符串中。这将是一项订阅服务,因此我需要知道用户想要订阅哪些事件。 我使用模板字段添加了一个复选框
示例代码: var div = new HtmlGenericControl("div"); div.Controls.Add(new Literal() { ID = "litSom
在一个网站上,我只使用一个单一级别的母版页,在使用该母版的页面中,我可以这样做。Master.FindControl("controlName") 来访问控件。工作正常。 但是,在具有两个母版页级别的
我想在 DDL OnSelectedIndexChanged 事件之后在 griview 上找到控制。其中目标控件位于 DDL 所在的行索引上。 这是我的代码; protected void Page
出现以下错误 找到具有相同ID'ltlItemCode'的多个控件。 FindControl要求控件具有唯一的ID。 在页面加载时不会发生此错误,但是当我更改具有AutoPostBack =“true
在 page_Init 上,我创建了许多 UpdatePanel,并在这些 UpdatePanel 中创建了一个 Panel 。然后,我使用此面板进一步动态添加其他控件。例如,我在每个面板中添加了一些
我在面板内有一个中继器。 在这个中继器内我有另一个面板。在某些情况下,我想设置这个 panel.visibility = false。 在后面的代码中,我尝试在 OnItemDataBound 上找到
我有一个在页面加载时动态加载的用户控件: protected void Page_Load(object sender, EventArgs e) { MyControl ctl = (MyC
我有多个文本框,我想用相同的方法以编程方式填充它们。 ">
我有一个绑定(bind)到 DropDownList 的 GridView。当 DropDownList 的索引更改时,GridView 由 SQL 查询更新。 GridView 的单元格中的值被转换
两个异常(exception): 索引越界 FindControl 返回 null(假装或未检测到控件) cs 代码:(现在下拉列表只需要在编辑模式下填充) protected void GridVi
我有一个 Literal 控件,我正试图找到它以便我可以在其中插入文本。我有一个包含多个内容占位符的母版页。 Project Navigation 我不断收到“对象引用未设置到对象的
我有两种方法。第一个动态创建一个表,然后将该表添加到 PlaceHolder 中。 private void generateData(){ Table tbl = new Table();
我现在知道通常您可以使用以下方法获取文本输入的值: txtName.Text 但是因为我的输入是在 LoginView 内部,所以我使用 FindControl 是这样的: LoginView1.Fi
我正在尝试根据相关文本框来控制按钮状态。除前缀外,名称相同。文本框和按钮位于页面上的表格中。
我开发了一个网络仪表板,它具有嵌入控件内部的控件结构。在许多情况下,我有一个控件的 ID,需要处理实际的控件对象。因此,我使用了一个实用方法,一个递归的 FindControl 实现,它在 Page(
我是一名优秀的程序员,十分优秀!