ASP.NET AJAX: запуск UpdatePanel после завершения загрузки страницы

Я уверен, что это легко, но не могу понять:

У меня есть страница ASP.NET с некоторыми UpdatePanels. Я хочу, чтобы страница полностью загружалась с текстом «Подождите» в UpdatePanels. Затем, когда страница станет полностью загружен, я хочу вызвать функцию кода программной части для обновления UpdatePanel.

Любые идеи относительно того, какая комбинация Javascript и кода программной части мне нужна для реализации этой идеи?

SAL

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

Тот же вопрос, лучший ответ: stackoverflow.com/questions/3877951/…

Bryan 07.10.2010 23:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
1
25 111
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Взгляните на ScriptManager.RegisterStartupScript

Идея состоит в том, что вы регистрируете сценарий для запуска при запуске (я думаю, после загрузки страницы). Ваш скрипт должен вызывать функцию, которая вызывает обратную публикацию через UpdatePanel.

Это лучший правильный ответ. Спасибо, Том, за то, что указал мне правильное направление. Расширенный ответ здесь: stackoverflow.com/questions/3877951/…

Bryan 07.10.2010 23:14

ScriptManager.RegisterStartupScript позволяет сценарию запускаться при запуске внутри панели обновлений. если вы используете старый ClientScript.RegisterStartupScript, то отображаемый вами скрипт будет находиться за пределами панели udpate и, следовательно, не будет выполняться во время асинхронной загрузки страницы.

Используя подход Тома со сценарием запуска, вы можете затем вызвать:

__doPostBack('UpdatePanelName', '');

Ответ принят как подходящий

Используйте таймер, который сработает через определенное количество миллисекунд (для загрузки страницы). В событии тика таймера обновите панель обновлений.

Я возился с предложениями ScriptManager - которые, как я полагаю, в конечном итоге я бы заработал, но мне кажется, что идею таймера проще реализовать и не так уж много (!) Взломать ?!

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

default.aspx

    <%@ Page Language = "C#" AutoEventWireup = "true" CodeBehind = "Default.aspx.cs" Inherits = "AJAXPostLoadCall._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml" >
<head runat = "server">
    <title>Untitled Page</title>
</head>
<body>
    <form id = "form1" runat = "server">
    <h2>And now for a magic trick...</h2>
    <asp:ScriptManager ID = "ScriptManager1" runat = "server" EnablePartialRendering = "True">
        </asp:ScriptManager>
        <div>
            <asp:UpdatePanel ID = "UpdatePanel1" runat = "server">
                <ContentTemplate>
                    <asp:Timer ID = "Timer1" runat = "server" Interval = "2000" ontick = "Timer1_Tick" />
                    <asp:Label ID = "Label1" runat = "server">Something magic is about to happen...</asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>

        </div>
    </form>
</body>
</html>

а код за default.aspx.cs читает

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace AJAXPostLoadCall
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        public void DoMagic()
        {
            Label1.Text = "Abracadabra";
        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            // Do the magic, then disable the timer
            DoMagic();
            Timer1.Enabled = false;
        }

    }
}

Итак, страница загружается, и таймер (содержащийся в UpdatePanel) срабатывает через 2 секунды после загрузки страницы (я думаю - я не уверен, когда на самом деле запускается таймер?). Текст метки перезаписывается, а затем таймер отключается, чтобы остановить дальнейшие обновления.

Достаточно просто - но можете ли вы, пуристы, сказать мне, ужасный ли это взлом?

Большой палец вверх и спасибо SAL и всем остальным, ребята. Это решило мою большую проблему: моя процедура занимала около минуты, прежде чем страница наконец отрисовывалась и отображалась.

Спасибо!

Выполнение таких вещей с помощью UpdatePanels, а не чего-то легко понятного, БУДЕТ укусить вас, это просто вопрос, когда.

Я думаю, что UpdatePanels легко понять! Вы не согласны с идеей таймера или с концепцией ASP UpdatePanels в целом? О каком прикусе мне нужно знать? Спасибо....

SAL 03.06.2009 17:35

@Sal: Вы знаете, что происходит за кулисами? Включая жизненный цикл страницы? Как состояние просмотра распространяется на состояние просмотра страницы? Почему это не удается с вложенными UpdatePanels, если на веб-сервере не установлен Framework 3.5 SP1?

erikkallen 03.06.2009 20:19

С самого первого вопроса в этом посте я думаю, что пользователь ищет сообщение, которое будет отображаться пользователю при загрузке панели обновлений. Просто поместите элемент управления UpdateProgress, как показано ниже, на вашу страницу, чуть выше элемента управления UpdatePanel, и не стесняйтесь запускать событие в своем UpdatePanel, поместите свой внутренний код, как обычно, и все, что содержится внутри элемента управления UpdateProgress, загрузится, пока ваша UpdatePanel контент обрабатывается в серверной части.

<asp:UpdateProgress AssociatedUpdatePanelID = "UpdatePanel1" ID = "UpdateProgress1" runat = "server">
  <ProgressTemplate>
    <div class = "mystyleclass">
      Please Wait...
    </div>
  </ProgressTemplate>
</asp:UpdateProgress>

Нет необходимости в каком-либо беспорядочном ручном javascript.

Другие вопросы по теме