Как выполнить частичную публикацию после загрузки страницы на клиенте? - PullRequest
2 голосов
/ 07 мая 2011

У меня есть некоторая обработка, которая может занять до 5+ секунд при первой загрузке страницы на сервер.Это внешнее ограничение, которое находится вне моего контроля, и поскольку оно происходит в веб-части, которую можно добавить на любую страницу на серверах, находящихся вне моего контроля, я не могу выполнить эту обработку в более широком масштабе, например в приложении.*

Я бы хотел, чтобы на странице отображался прогресс, пока в панели обновления происходит частичная обратная передача, а не пользователь, ожидающий загрузки страницы, прежде чем что-либо увидеть вообще.Код этой обратной передачи выполнит занятую работу.

Я попытался использовать таймер ajax, который хорошо работает, за исключением случаев, когда в коде обратной передачи возникает исключение.хотел бы знать, как выполнить частичную обратную передачу один раз и только один раз, как только страница загрузится на клиенте.

1 Ответ

2 голосов
/ 13 мая 2011

Я понял это.Чтобы выполнить частичную обратную передачу на сервер через UpdatePanel без использования скрытых элементов управления, сделайте это с помощью jQuery:

<script type="text/javascript">
    $(document).ready(function () {
        __doPostBack('<%=UpdatePanel1.ClientID %>');
    });
</script>

Это позволит выполнить частичную обратную передачу на сервер для UpdatePanel с идентификатором UpdatePanel1, как только HTML DOMготов.Затем вы можете использовать жизненный цикл страницы ASP.NET, чтобы подключиться к любому событию, которое вам подходит.Я подключился к событию загрузки панели обновления:

protected void UpdatePanel1_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack && Session["InitializedKey"] == null)
    {
        Session["InitializedKey"] = true;
        // do your initialization stuff here
    }
}

Приведенный выше код будет работать только в том случае, если страница отправляется обратно и установлена ​​переменная сеанса.Теперь вам нужно очистить переменную сеанса, когда пользователь обновляет страницу, так как здесь предполагается запустить этот код при первой обратной передаче и только при первой обратной передаче.Так что очистите переменную сеанса в Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
        Session[initializedKey] = null;
}

И если вы хотите показать индикатор прогресса, когда страница находится в частичной обратной передаче, сделайте этот javascript:

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
    function BeginRequestHandler(sender, args) {
        if (args._postBackElement.id == '<%=UpdatePanel1.ClientID %>') {
            $get('Progress').className = 'Progress';
        }
    }
    function EndRequestHandler(sender, args) {
        if (sender._postBackSettings.sourceElement.id == '<%=UpdatePanel1.ClientID %>') {
            $get('Progress').className = 'Hidden';
        }
    }
</script>

Это требуеттег div с идентификатором «Progress» и всем, что вы хотите показать для прогресса в этом div.Вам также понадобится немного CSS, чтобы установить отображение и видимые стили тега div в классах с именами Hidden и Progress.Не забудьте выполнить обработку ошибок при частичной обратной передаче!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...