我有这样的图像:
<asp:Image runat="server" ID="btnabout1" ImageUrl="~/graphics/buttons/btnabout1.png" AlternateText="About" />
我可以像这样(显然)从代码隐藏中访问控件:
btnabout1.Visible = false;
但这不起作用:
Page.FindControl("btnabout1").Visible = false;
重点是使用变量controlID并设置属性。
我想我错误地理解了这个方法,所以有人可以启发我。
目的是创建一个方法,该方法获取当前页面的文件名并相应地设置图像/按钮可见/不可见。像这样:
string filename = System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath);
string strippedfilename = filename.Substring(0, filename.IndexOf("."));
Page.FindControl("btn" + strippedfilename + "3").Visible = true;
Page.FindControl("btn" + strippedfilename + "2").Visible = false;
Page.FindControl("btn" + strippedfilename + "1").Visible = false;
由于我无法使Page.FindControl工作,我正在使用
Dictionary<string, Control[]>
相反,当然它不是那么动态,因为添加新页面意味着必须添加到字典中,但我想现在还可以......
答案 0 :(得分:0)
您用于FindControl
的重载仅查看直接子控件 - 如果它嵌套得更深,那么控件将无法找到。
还有另一个重载可以让你提供函数应该经过多少级别的嵌套 - 这可以让你更深入地挖掘(以成本 - 性能)。
由于您只需执行btnabout1.Visible = false;
,因此无需在此方案中使用FindControl
。
答案 1 :(得分:0)
首先,我认为FindControl方法不是递归的。要使用此方法,您可能需要通过所有父cotrol(如面板或其他人)调用它。
如果您正在使用母版页,请尝试使用:
ContentPlaceHolder h = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolderName");
h.FindControl("");
答案 2 :(得分:0)
使用以下方法
Button btnAbout=(Button)Page.FindControl("btnAbout");
btnAbout.Visible=false;
这是使用此方法的正确方法。