2012-02-01 37 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属性不会更改异步模式。其目的是让页面上的控件知道页面是否以异步模式运行,因此篡改该属性可能会导致控件出现故障。