2011-01-28 83 views
0

有没有方法可以在加载之前停止等待usercontrol加载的主页?停止等待usercontrol的页面以完成加载

我有一个usercontrolt必须做很多数据库调用,这可能需要几秒钟,使页面加载缓慢。 理想情况下,我希望主页面马上加载,然后在用户控件内容准备就绪时显示。

我想不出一种做法!

帮助!

贝克斯

回答

0

是的,有一种方法。它被称为AJAX(http://en.wikipedia.org/wiki/AJAX)。尽管在单个请求中没有办法做到这一点。

此外,您可以使数据库调用异步(Begin/End方法)并在控件生命周期的某个早期阶段启动调用,然后在稍后阶段结束请求。通过这种方式,ASP.NET可以继续处理页面,同时等待数据库作出响应。根据您的逻辑工作流程和计时,这可以将加载时间缩短一半或者什么也不做。

+0

异步不会提高页面加载时间。事实上,异步并不会改善加载时间,它会做什么(如果正确完成,包括使页面异步),它会释放请求线程(使用I/O完成端口),以便IIS可以使用它来响应其他请求从而提高网站的吞吐量。发出原始请求的浏览器仍然会等待响应,这将花费当前的时间。 – 2011-01-28 11:42:09

+0

您指的是异步页面。我指的是异步数据库请求,这些是完全不同的事情。如果数据库请求需要例如1秒钟并且可以在页面生命周期的开始时进行,并且如果页面上的其他控件的生命周期的其他阶段需要一秒钟,则可以稍后从数据库查询中收集异步结果生命周期并将加载时间缩短一半。当然,大多数代码不符合这些要求。 – Stilgar 2011-01-29 17:57:20

0

不是。除非您使用ajax来请求需要很长时间才能生成的内容。 您必须明白,控件和页面都是由服务器处理的,唯一返回给浏览器的是html。在整个页面(包括所有控件)都被处理之前,没有任何内容被发送到浏览器。

0

你的问题的简短答案以及你想要的东西如何工作是没有的。 “页面”是一个服务器端的事情,它需要在浏览器看到它之前完成处理。

但是,为了实现您要查找的内容,您可以在浏览器(AJAX)中使用JavaScript对服务器进行另一次调用,然后该服务器仅将该数据作为JSON数组或XML发回文件,然后你必须解析和构造HTML以显示它。或者你的回应可能是你可以直接插入DOM的html。

获得您想要的响应的一种简单方法是构建另一个托管此控件的页面,并且页面的标记除控件本身外没有其他html。您可以对此页面进行AJAX调用,并且响应将是控件生成的html。你把这个html插入到你想要的DOM中。当然,在您的AJAX调用中,您还需要发送其他页面所需的任何参数,以便控件可以完成这一操作。

恐怕,如果您是AJAX和DOM的新手,那么所有这些听起来都会非常复杂。

0

查看Ajax Control Toolkit中的DynamicPopulate控件。

您可以在这里找到一个样本:DynamicPopulate