首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否允许在.ASCX控件加载完成之前显示.ASPX页?

是否允许在.ASCX控件加载完成之前显示.ASPX页?
EN

Stack Overflow用户
提问于 2011-03-26 03:09:04
回答 3查看 2.3K关注 0票数 1

我有一个带有一个控件(.ascx)的ASP.NET页面。页面(.aspx) onload将一些文本分配给两个标签,并将产品ID传递给.ascx控件。.ascx控件onload从.aspx页面获取产品ID,并多次访问数据库、执行多次计算等--基本上需要很长时间才能加载。

因此,当我点击这个.aspx页面的链接时,页面需要7-10秒才能加载。我已经将范围缩小到.ascx控件的计算是罪魁祸首,并且我已经尽可能地优化了代码……但这仍然花了太长时间。

有没有办法在控件加载之前加载.aspx页面?(也许会显示“正在加载...”动画?就像在UpdateProgress中使用一样?)

EN

回答 3

Stack Overflow用户

发布于 2011-03-26 03:45:56

你可以用UpdatePanel来做这件事。这将需要一些小技巧,但尝试如下所示:

1)将UserControl放入UpdatePanel中。

2)在用户控件上放置一个公共属性,比如IsEnabled,它将有条件地什么也不做,或者呈现一个“请稍候”。在你的主页中设置为false。

3)在主页中添加一些OnInit代码:

代码语言:javascript
运行
复制
if (MyScriptManager.IsInAsyncPostback) {
    MyUserControl.IsEnabled=true;
}

4)按如下方式添加客户端脚本:

代码语言:javascript
运行
复制
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..

代码语言:javascript
运行
复制
finished=false;
$(document).ready(function() {
   if (!finished) {...
   }
});

这应该做的是在页面加载完成后立即启动异步回发,这将导致刷新更新面板。由于您将其设置为在异步回发时启用,因此它将在第二次呈现自己。

票数 2
EN

Stack Overflow用户

发布于 2011-03-26 03:14:21

实现此目的的唯一可能方法是将其设置为单独的HTTP资源。目前,.NET正在将控件集成到页面中,以便它等待,直到它有了需要响应的一切。

您可以通过多种不同的方法来完成此操作:

通过包含控件的javascript

  • Seperate页调用的
  • Web服务(托管在iFrame中以显示在同一页上)

最好的方法是使用iFrame (或类似的东西),它将指示浏览器在主页发送后请求控件)。

票数 1
EN

Stack Overflow用户

发布于 2011-03-26 03:25:55

就我个人而言,我永远不会使用iFrame在页面上加载内容--这更像是一个hack而不是任何东西,而且,iframe ==是“坏”的。

但是他们是对的,你将不能做任何你正在寻找的事情。

如果用户控件没有任何导致回发的web控件(或者有任何需要在回发期间访问的表单控件),那么我将使用AJAX在页面加载之后请求服务器上的数据,并使用javascript在页面上显示内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5437001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档