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





Взгляните на ScriptManager.RegisterStartupScript
Идея состоит в том, что вы регистрируете сценарий для запуска при запуске (я думаю, после загрузки страницы). Ваш скрипт должен вызывать функцию, которая вызывает обратную публикацию через UpdatePanel.
Это лучший правильный ответ. Спасибо, Том, за то, что указал мне правильное направление. Расширенный ответ здесь: stackoverflow.com/questions/3877951/…
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: Вы знаете, что происходит за кулисами? Включая жизненный цикл страницы? Как состояние просмотра распространяется на состояние просмотра страницы? Почему это не удается с вложенными UpdatePanels, если на веб-сервере не установлен Framework 3.5 SP1?
С самого первого вопроса в этом посте я думаю, что пользователь ищет сообщение, которое будет отображаться пользователю при загрузке панели обновлений. Просто поместите элемент управления UpdateProgress, как показано ниже, на вашу страницу, чуть выше элемента управления UpdatePanel, и не стесняйтесь запускать событие в своем UpdatePanel, поместите свой внутренний код, как обычно, и все, что содержится внутри элемента управления UpdateProgress, загрузится, пока ваша UpdatePanel контент обрабатывается в серверной части.
<asp:UpdateProgress AssociatedUpdatePanelID = "UpdatePanel1" ID = "UpdateProgress1" runat = "server">
<ProgressTemplate>
<div class = "mystyleclass">
Please Wait...
</div>
</ProgressTemplate>
</asp:UpdateProgress>
Нет необходимости в каком-либо беспорядочном ручном javascript.
Тот же вопрос, лучший ответ: stackoverflow.com/questions/3877951/…