ASP.NET АЯКС:Запуск панели обновления после завершения загрузки страницы

StackOverflow https://stackoverflow.com/questions/31935

Вопрос

Я уверен, что это легко, но я не могу в этом разобраться:

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

Есть какие-нибудь идеи относительно того, какая комбинация Javascript и code-behind мне нужна для реализации этой идеи?

СЭЛ

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

Это было полезно?

Решение

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

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

Я повозился с предложениями 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;
        }

    }
}

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

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

Взгляните на ScriptManager.Зарегистрируйте Startupscript

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

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

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

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

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

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

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

__doPostBack('Имя панели обновления', ");

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

Спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top