ASP.NET AJAX:页面加载完成后触发UpdatePanel
我敢肯定这很容易,但我无法弄清楚:
我有一个带有一些UpdatePanels的ASP.NET页面。我希望页面在UpdatePanels中完全加载一些"请稍候"文本。然后,一旦页面完全加载,我想调用一个代码隐藏函数来更新UpdatePanel。
关于实现该想法需要Java脚本和代码背后的任何组合的任何想法吗?
萨尔
PS:我曾尝试将函数调用放到Page_Load中,但是在交付页面之前先运行代码,并且由于我要运行的函数需要一些时间,因此页面加载时间太长。
解决方案
回答
看看ScriptManager.RegisterStartupScript
这个想法是我们注册一个脚本以在启动时运行(我相信页面加载后)。脚本应调用一个导致通过UpdatePanel发回帖子的函数
回答
ScriptManager.RegisterStartupScript允许脚本在启动时在更新面板中运行。如果使用旧的ClientScript.RegisterStartupScript,则呈现的脚本将超出udpate面板的范围,因此将不会在异步页面加载期间执行。
回答
使用Tom的启动脚本方法,我们可以调用:
__doPostBack('UpdatePanelName', '');
回答
使用计时器控件,该控件将在特定的毫秒数后触发(用于加载页面)。在计时器滴答事件中,刷新更新面板。
回答
我摆弄着ScriptManager的建议,我认为我最终会开始工作的,但是在我看来,Timer的想法更容易实现,而不是真正的(!)这么多hack ?!
这是在初始页面渲染完成后如何更新面板的方法...
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这样的事情而不是容易理解的事情会咬你,这只是时间的问题。
回答
从本文的第一个问题开始,我认为用户正在寻找的是在更新面板加载时向用户显示的消息。只需在页面上方的UpdatePanel控件上方放置一个UpdateProgress控件,然后随意在UpdatePanel中触发一个事件,然后像往常一样放置后端代码,UpdateProgress控件中包含的所有内容就会在UpdatePanel时加载后端正在处理内容。
<asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" ID="UpdateProgress1" runat="server"> <ProgressTemplate> <div class="mystyleclass"> Please Wait... </div> </ProgressTemplate> </asp:UpdateProgress>
不需要任何凌乱的手动javascript内容。