2012-02-01 87 views
3

是否可以在我的代碼隱藏文件中設置頁面僞指令的異步模式。將頁面異步模式設置爲true從代碼隱藏

我沒有辦法直接修改<%@Page %>屬性,並努力尋找一種方法在我的代碼隱藏中實現這一點。

我在Page_Load方法試圖添加Page.AsyncMode = true,但它返回以下錯誤:

is inaccessible due to its protection level

有沒有辦法做到這一點?無法直接修改主頁面?

回答

0

我的猜測 - 你試圖從你的母版頁訪問這個屬性。但根據documentation,這個屬性是protected bool AsyncMode { get; set; }。這意味着它可以從聲明它的類中進行訪問,也可以從派生於聲明此成員的類的任何類中進行訪問。

該屬性在System.Web.UI.Page中聲明,並且可以在其中進行訪問並從中派生任何類。 MasterPage不是源自Page。這就是爲什麼你不能訪問它。

您可以輕鬆地從你的頁面訪問:

public partial class YourPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     this.AsyncMode = true; 
    } 
} 
0

因爲你母版不會從你的頁面繼承,你不能訪問AsyncMode屬性。

如果你絕對必須編輯從母版的價值也許考慮添加到您的網頁上被稱爲「UpdateAsyncMode」,做從母版的Page_Load以下的方法

protected void Page_Load(object sender, EventArgs e) 
    { 
     MyPageClass p = this.Page as MyPageClass ; 

     p.UpdateAsyncMode(true); 
    } 

或者,如果這一點是必須更強大的你可以爲網頁創建一個基類,如以下,並有所有網頁在您的網站擴展基類

public abstract class MyBasePage : System.Web.UI.Page 
{ 
    public void UpdateAsyncMode (bool b) 
    { 
     this.AsyncMode = b; 
    } 
} 
3

不,你不能改變一個頁面的異步模式的代碼隱藏。一個異步頁面實現了IHttpAsyncHandler接口,並且在.aspx文件被ASP.NET編譯並且代碼正在運行後,無法更改由頁面實現的接口。

設置Page.AsyncMode屬性不會更改異步模式。其目的是讓頁面上的控件知道頁面是否以異步模式運行,因此篡改該屬性可能會導致控件出現故障。