Установка режима асинхронности страниц в true из Code-Behind - PullRequest
3 голосов
/ 01 февраля 2012

Возможно ли в моем файле code-behind установить асинхронный режим директивы страницы.

У меня нет возможности напрямую изменить атрибут <%@Page %> и изо всех сил пытаться найти способ реализовать этов моем коде.

Я пытался в своем методе Page_Load добавить Page.AsyncMode = true, но он возвращает следующую ошибку:

недоступен из-за уровня защиты

Есть ли способ сделать это?Не имея возможности напрямую изменить главную страницу?

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Нет, вы не можете изменить асинхронный режим страницы в коде позади. Асинхронная страница реализует интерфейс IHttpAsyncHandler, и невозможно изменить интерфейсы, реализованные на вашей странице после компиляции ASP.NET файла .aspx и запуска вашего кода.

Установка свойства Page.AsyncMode не изменит асинхронный режим. Его цель - сообщить элементам управления на странице, работает ли страница в асинхронном режиме или нет, поэтому изменение свойства может привести к неправильной работе элементов управления.

0 голосов
/ 01 февраля 2012

Поскольку вы 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;
    }
}
0 голосов
/ 01 февраля 2012

Полагаю, вы пытаетесь получить доступ к этому свойству со своей главной страницы. Но согласно документации это свойство равно 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;
    }
}
...