Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 从页基类在页中查找控件_C#_Asp.net_Inheritance_Hyperlink_Findcontrol - Fatal编程技术网

C# 从页基类在页中查找控件

C# 从页基类在页中查找控件,c#,asp.net,inheritance,hyperlink,findcontrol,C#,Asp.net,Inheritance,Hyperlink,Findcontrol,希望你有个耶稣受难节之类的。。。好的,我的问题是: 我的所有ASPX页面都继承自名为BasePage的基类。BasePage继承自: System.Web.UI.Page 现在,如何从我的页面库访问/设置我的aspx页面中的控件?我试过这个: HyperLink hypMainMenu = (HyperLink)Page.FindControl("hypMainMenu"); hypMainMenu.NavigateUrl = AppConfiguration.AppSettings.Urls

希望你有个耶稣受难节之类的。。。好的,我的问题是:

我的所有ASPX页面都继承自名为BasePage的基类。BasePage继承自:

System.Web.UI.Page
现在,如何从我的页面库访问/设置我的aspx页面中的控件?我试过这个:

HyperLink hypMainMenu = (HyperLink)Page.FindControl("hypMainMenu");
hypMainMenu.NavigateUrl = AppConfiguration.AppSettings.Urls.MainMenu;
但是hypMainMenu总是空的-我找不到那个混蛋。有什么想法吗?或者这是一种不好的做法,有人可以推荐一种更好的方法来做到这一点


提前谢谢

尽管什么是好的实践和什么不是好的实践是非常主观的,但我必须说,试图从控件的基类访问任何东西都是不好的实践。一个基类应该只包含与继承它的所有类相关的代码,你怎么知道你将来写的每个页面都有这个控件


解决问题的更好方法(我假设主菜单的代码只在一个地方)是编写一个
UserControl
,并将其包含在每个页面上。如果您需要对该控件执行某些特定操作,可以在
UC
codebeard

中执行该操作,当您找到控件时,它很可能具有父属性;-)@托马斯:是的,我感觉有人会这么说。我想我会选择一个用户控件——这很有意义,为这个建议干杯。然而,有一次我没有这个选项(出于某种原因…实际上我认为这与在母版页的body标记上设置依赖于页面的类有关),所以我仍然想知道如何进行此操作以供将来参考。据我所知,FindControl是为您的目的而设计的。您只需开始从包含后面的控件的已知控件中查找,然后递归地使用FindControl向下钻取DOM。你可以写一些东西来爬过你的页面,但这将是一个梦魇般的性能提升。@Mark:是的,我以前见过这样递归地完成的事情。可以我可能暂时不谈这个了。