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

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

我无法直接修改属性,并且在我的代码隐藏中努力寻找实现这一点的方法。

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

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

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

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

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

我的猜测 – 您正在尝试从母版页访问此属性。 但根据文档 ,这个属性是protected bool AsyncMode { get; set; } protected bool AsyncMode { get; set; } 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不从您的页面inheritance,所以您无法访问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; } }