【问题标题】:Finding a Control in a page from a page base class从页面基类中查找页面中的控件
【发布时间】:2010-10-24 19:09:17
【问题描述】:

希望你周五过得愉快……好吧,这是我的问题:

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

System.Web.UI.Page

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

HyperLink hypMainMenu = (HyperLink)Page.FindControl("hypMainMenu");
hypMainMenu.NavigateUrl = AppConfiguration.AppSettings.Urls.MainMenu;

但是 hypMainMenu 总是为空 - 我找不到这个混蛋。有任何想法吗?或者这是不好的做法,有人可以推荐更好的方法吗?

提前致谢!

【问题讨论】:

  • 当你找到你的控件时,它很可能有一个 Parent 属性 ;-)

标签: c# asp.net inheritance hyperlink findcontrol


【解决方案1】:

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

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

【讨论】:

  • @Tomas:是的,我感觉有人会这么说。我想我会使用用户控件 - 有道理,为建议喝彩。然而,当我没有那个选项时,这又出现了一次(出于某种原因......实际上我认为它与在母版页的正文标记上设置页面相关类有关)所以我仍然会想知道如何去做以备将来参考。
  • 据我所知,FindControl 是为了您想要的目的。您只需从包含您之后的控件的已知控件开始查找,然后递归地使用 FindControl 向下钻取 DOM。您可以编写一些内容来抓取您的漏洞页面,但这将是一场噩梦。
  • @Mark:是的,我以前见过类似的递归方法。好的。我可能会暂时离开这个。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2019-07-08
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多