我有一个带有一个控件(.ascx)的ASP.NET页面。页面(.aspx) onload将一些文本分配给两个标签,并将产品ID传递给.ascx控件。.ascx控件onload从.aspx页面获取产品ID,并多次访问数据库、执行多次计算等--基本上需要很长时间才能加载。
因此,当我点击这个.aspx页面的链接时,页面需要7-10秒才能加载。我已经将范围缩小到.ascx控件的计算是罪魁祸首,并且我已经尽可能地优化了代码……但这仍然花了太长时间。
有没有办法在控件加载之前加载.aspx页面?(也许会显示“正在加载...”动画?就像在UpdateProgress中使用一样?)
发布于 2011-03-26 03:45:56
你可以用UpdatePanel来做这件事。这将需要一些小技巧,但尝试如下所示:
1)将UserControl
放入UpdatePanel
中。
2)在用户控件上放置一个公共属性,比如IsEnabled
,它将有条件地什么也不做,或者呈现一个“请稍候”。在你的主页中设置为false。
3)在主页中添加一些OnInit
代码:
if (MyScriptManager.IsInAsyncPostback) {
MyUserControl.IsEnabled=true;
}
4)按如下方式添加客户端脚本:
finished=false;
Sys.WebForms.PageRequestManager.pageLoaded(function(sender,args) {
if (!finished) {
finished=true;
__doPostBack('','');
// you can include the uniqueID of your updatepanel as the first arg
// otherwise it will refresh all update panels
}
});
或者使用jquery..
finished=false;
$(document).ready(function() {
if (!finished) {...
}
});
这应该做的是在页面加载完成后立即启动异步回发,这将导致刷新更新面板。由于您将其设置为在异步回发时启用,因此它将在第二次呈现自己。
发布于 2011-03-26 03:14:21
实现此目的的唯一可能方法是将其设置为单独的HTTP资源。目前,.NET正在将控件集成到页面中,以便它等待,直到它有了需要响应的一切。
您可以通过多种不同的方法来完成此操作:
通过包含控件的javascript
最好的方法是使用iFrame (或类似的东西),它将指示浏览器在主页发送后请求控件)。
发布于 2011-03-26 03:25:55
就我个人而言,我永远不会使用iFrame在页面上加载内容--这更像是一个hack而不是任何东西,而且,iframe ==是“坏”的。
但是他们是对的,你将不能做任何你正在寻找的事情。
如果用户控件没有任何导致回发的web控件(或者有任何需要在回发期间访问的表单控件),那么我将使用AJAX在页面加载之后请求服务器上的数据,并使用javascript在页面上显示内容。
https://stackoverflow.com/questions/5437001
复制相似问题