【问题标题】:Setting Page Async mode to true from Code-Behind从 Code-Behind 将页面异步模式设置为 true
【发布时间】:2015-09-10 15:52:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我的猜测 - 您正试图从您的母版页访问此属性。但是根据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;
          }
      }
      

      【讨论】:

        【解决方案3】:

        因为您的 MasterPage 不从您的 Page 继承,所以您无法访问 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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-27
          • 2021-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多