Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# 我不太懂Page.FindControl_C#_Asp.net_Controls - Fatal编程技术网

C# 我不太懂Page.FindControl

C# 我不太懂Page.FindControl,c#,asp.net,controls,C#,Asp.net,Controls,我有这样一个形象: <asp:Image runat="server" ID="btnabout1" ImageUrl="~/graphics/buttons/btnabout1.png" AlternateText="About" /> 但这不起作用: Page.FindControl("btnabout1").Visible = false; 重点是使用变量controlID并设置属性 我想我对这个方法理解有误,请有人给我点化一下 其目的是创建一个方法,该方法采用当前页面的文

我有这样一个形象:

<asp:Image runat="server" ID="btnabout1" ImageUrl="~/graphics/buttons/btnabout1.png" AlternateText="About" />
但这不起作用:

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[]>

相反,但它当然不是动态的,因为添加新页面意味着必须添加到字典中,但我想现在还可以…

您正在使用的重载只查看直接子控件-如果它嵌套得更深,那么将找不到该控件

还有另一个重载,可以让您提供函数应该经历多少嵌套级别—这可以让您以性价比更深入地挖掘


因为您只需执行btnabout1.Visible=false;,在这种情况下不需要使用FindControl。

首先,我认为FindControl方法不是递归的。要使用此方法,您可能需要通过所有父控件(如panel或其他控件)调用它

如果您使用的是母版页,请尝试使用以下选项:

ContentPlaceHolder h = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolderName");
h.FindControl("");

使用以下方法

Button btnAbout=(Button)Page.FindControl("btnAbout");
btnAbout.Visible=false;

这是使用此方法的正确方法。

只有当某些IDE自动生成控件时,此方法才有效。如果您正在添加控件dynamicali Page.controls.Add或类似的东西,此解决方案将不起作用。@user35443-恕我直言,如果您的答案正确,您的答案也会遇到同样的问题。我也应该投反对票吗?我只是觉得你没有他需要的解决方案。我认为他不是弱智,他知道他可以尝试使用这个。达奇奥,但如果他需要使用FindControl,他知道为什么。如果你认为你有理由,你可以投反对票。@user35443-不要猜测,添加评论并询问OP。我相信我理解OP的要求。这是不必要的。Visible属性派生自控件类,该控件类是按钮类的父级,Image btnAbout1=ImagePage.FindControlbtnabout1;btnAbout1.Visible=false;也不行。btnAbout1为空。我告诉过你。您需要检查btnabout的所有父控件。在哪个页面生命周期事件中调用page.FindControl方法?确保它至少是Page_Init或更高版本的事件。您可以查看此链接以查看通过ID查找控件的递归方法:。还要确保控件不在项目模板内,即在Repeater控件中,这样就找不到它。此图像是在yourpagename.aspx中还是在yourusercontrol.ascx中?
Button btnAbout=(Button)Page.FindControl("btnAbout");
btnAbout.Visible=false;