如何从ASP.NET网站(而不是Web应用程序)中的用户控件获取父页面

Joe*_*oeB 30 c# asp.net user-controls webforms

正如主题所要求的那样.

编辑1

在处理请求以便在用户控件中存储对父页面的引用时,有时可能会这样吗?

Pau*_*der 62

this.Page
Run Code Online (Sandbox Code Playgroud)

或从几乎任何地方:

Page page = HttpContext.Current.Handler as Page
Run Code Online (Sandbox Code Playgroud)


And*_*are 14

我无法想到用户控件知道它所在页面的任何信息的任何好理由,因为用户控件应该不知道它的上下文,并且无论它在哪个页面上都可以预测.

话虽这么说,你可以使用this.Page.

  • 如果有问题的应用程序是一个silo'ed应用程序,并且所有页面都继承自BasePage类,并且您需要访问该BasePage,那么this.Page是一个完全可以接受的解决方案,因为该应用程序中的所有页面都将从该BasePage继承并且Control将仅为该申请定义. (6认同)
  • 一个很好的用例是访问Page.Items集合,该集合可用于存储在Asp.net页面处理周期的生命周期中使用的对象.您可以避免在每个用户控件中重新加载公共对象. (2认同)
  • 这在理想世界中很好,但在很多情况下,控件的某些部分可能具有依赖于调用页面的条件要求。一个很好的例子是,如果在每个页面上都使用了一个控件,并且该控件显示或记录它正在调用的页面(无论出于何种原因,如内部跟踪、调试,甚至安全原因)。 (2认同)

Jos*_*ein 7

您可以使用Parent属性

如果你需要这个在页面上找到一个控件,那么你可以使用

Label lbl_Test = (Label)Parent.FindControl("lbl_Test");
Run Code Online (Sandbox Code Playgroud)