从Code-Behind将Page Async模式设置为true

时间:2012-02-01 10:51:42

标签: c# asp.net asynchronous code-behind

在我的代码隐藏文件中是否可以设置page指令的异步模式。

我无法直接修改<%@Page %>属性,并且难以找到在我的代码隐藏中实现此功能的方法。

我在我的Page_Load方法中尝试添加Page.AsyncMode = true,但它返回以下错误:

  

由于其保护级别而无法访问

有没有办法做到这一点?无法直接修改母版页?

3 个答案:

答案 0 :(得分:3)

不,您无法在代码隐藏中更改页面的异步模式。异步页面实现IHttpAsyncHandler接口,在ASP.NET编译.aspx文件并且代码正在运行之后,无法更改页面实现的接口。

设置Page.AsyncMode属性不会更改异步模式。其目的是让页面上的控件知道页面是否以异步模式运行,因此篡改属性可能会导致控件出现故障。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:0)

因为您的MasterPage不是从您的页面继承,所以您无法访问AsyncMode属性。

如果您绝对必须编辑MasterPage中的值,可以考虑在页面中添加一个名为“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;
    }
}