回答
this.Page
或從任何地方:
Page page = HttpContext.Current.Handler as Page
你可以,如果你需要用它來找到網頁上的控制,那麼你可以使用使用Parent屬性
Label lbl_Test = (Label)Parent.FindControl("lbl_Test");
我想不出有什麼好的理由讓用戶控件知道它所在頁面的任何內容,因爲用戶控件應該是無視它的上下文,並且無論它在哪個頁面上都可預測地行爲。
這就是說,你可以使用this.Page
。
這是一個很好的觀點。明確定義的用戶控件應該完全獨立於他們所在的頁面。 – jtate 2014-04-25 14:15:09
如果有問題的應用程序是孤島應用程序,並且所有頁面都從BasePage類繼承,並且您需要訪問該BasePage,則this.Page是完全可接受的解決方案,因爲該應用程序中的所有頁面都將從該BasePage和控件將僅爲該應用定義。 – cavillac 2014-10-29 14:17:36
一個很好的用例就是訪問Page.Items集合,該集合可用於存儲用於Asp.net頁面處理週期的生命週期的對象。您可以避免在每個用戶控件中重新加載公用對象。 – humbads 2016-09-16 14:42:55
每個控件都有一個父屬性,您可以使用它來訪問父項。
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(this.Parent.ID);
}
編輯: 取決於所要存儲的參考和使用什麼來存儲參考頁面生命週期事件之一。然而,參考始終可用
我總是在System.Web.UI.UserControl中使用this.Page。
或者你總是可以對父進行遞歸調用,直到你遇到一個對象是一個頁面。
一種矯枉過正,但...
protected Page GetParentPage(Control control)
{
if (this.Parent is Page)
return (Page)this.Parent;
return GetParentPage(this.Parent);
}
這可能會導致StackOverFlowException ... – Moumit 2013-12-17 10:58:26
,我發現這樣做的方法是創建一個接口,實現該接口,使用this.Page從控制得到的頁面,將其轉換爲界面,然後調用該方法。
您必須使用NamingContainer這樣的:
try
{
if (!string.IsNullOrWhiteSpace(TargetCtrlID))
{
var ctrl = NamingContainer.FindControl(TargetCtrlID);
if(ctrl != null)
Console.Write("'" + ctrl.ClientID + "'");
}
}
catch
{
}
創建用戶控制的委託,然後分配給它從父頁面的方法。
class MyUserControl : UserControl
{
delegate object MyDelegate(object arg1, object arg2, object argN);
public MyDelegate MyPageMethod;
public void InvokeDelegate(object arg1, object arg2, object argN)
{
if(MyDelegate != null)
MyDelegate(arg1, arg2, argN); //Or you can leave it without the check
//so it can throw an exception at you.
}
}
class MyPageUsingControl : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
MyUserContorlInstance.MyPageMethod = PageMethod;
}
public object PageMethod(object arg1, object arg2, object argN)
{
//The actions I want
}
}
- 1. PowerShell + WebAdministration - 如何從Web應用程序獲取網站?
- 2. 桌面應用程序如何從網站獲取信息?
- 3. 如何從父頁面asp.net調用功能的用戶控制
- 4. 如何從用戶控件獲取父頁面中包含的按鈕的ID?
- 5. 從iframe中的silverlight應用程序獲取父頁面url
- 6. ASP.NET網頁vs ASP.NET Web應用程序?
- 7. 對齊asp.net web應用程序的頁面上的控件
- 8. 如何將控件傳遞給另一個Web應用程序並獲取我的asp.net頁面中的響應?
- 9. 從網頁用戶控件獲取__EVENTTARGET
- 10. 從父頁面調用Web用戶控件的功能
- 11. ASP.NET。網站或Web應用程序?
- 12. VS2008 ASP.NET網站與Web應用程序
- 13. asp.net網站VS Web應用程序
- 14. 在VB.Net Web應用程序添加用戶控件到網頁
- 15. 用於桌面應用程序的ASP.NET網頁控制面板
- 16. 客戶端控制檯應用程序獲取特定SharePoint 2007 Web應用程序中的所有網站集
- 17. ASP.NET與多個Web應用程序共享用戶控件/網頁邏輯
- 18. 從控制獲取父用戶控件
- 19. ASP.NET添加剃刀頁面中的Web應用程序沒有網站,NO MVC
- 20. Asp.net Web應用程序silverlight頁面中的程序集引用
- 21. 如何判斷它是「ASP.NET網站」還是「ASP.NET Web應用程序項目」?
- 22. 如何從用戶控件的父頁面調用JavaScript函數?
- 23. Web頁面是如何創建ASP.Net Web應用程序的編程模型
- 24. 調用網頁用戶控件的父aspx頁面的功能
- 25. 如何獲取從網站轉換的Web應用程序的彙編信息
- 26. ASP.net網頁用戶控件
- 27. 如何從asp.net中的web用戶控件調用web服務?
- 28. 如何從自定義用戶控件中刷新父頁面?
- 29. EndpointNotFoundException在Web服務調用網站,但不是從控制檯應用程序
- 30. 如何自定義ASP.NET網站的一個頁面的用戶控件?
沒有必要存儲引用 - 每個UserControl已經公開一個Page屬性。 – 2009-06-22 19:30:50