正在从代码隐藏中将页面异步模式设置为true

本文关键字:异步 模式 设置 true 代码 隐藏 | 更新日期: 2023-09-27 18:22:19

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

我没有办法直接修改<%@Page %>属性,也很难在代码后面找到实现这一点的方法。

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

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

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

正在从代码隐藏中将页面异步模式设置为true

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

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

我猜您正试图从母版页访问此属性。但根据文献记载,这个性质是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;
    }
}

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

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