我的 .aspx.cs 代码中有一个函数,它需要很长时间才能完成处理,直到我想显示一个很酷的加载动画。
我查看了一些早期的帖子,但要么这些帖子对我不起作用,要么有特定于页面加载场景的解决方案(在函数完成时不加载)。
我想正确的方法是在 main 函数启动之前触发一个 Javascript startLoader() 函数(这需要很长时间),然后从 .aspx.cs 本身调用一个 stopLoader() 以在功能结束。有什么建议如何实施吗?
我的 .aspx.cs 代码中有一个函数,它需要很长时间才能完成处理,直到我想显示一个很酷的加载动画。
我查看了一些早期的帖子,但要么这些帖子对我不起作用,要么有特定于页面加载场景的解决方案(在函数完成时不加载)。
我想正确的方法是在 main 函数启动之前触发一个 Javascript startLoader() 函数(这需要很长时间),然后从 .aspx.cs 本身调用一个 stopLoader() 以在功能结束。有什么建议如何实施吗?
如果你真的想做,那么唯一的办法就是webworkers。您可能已经听说过它们,或者如果没有,我强烈建议您看看。
是的,在按钮的 OnCliencClick 上触发 startLoader() 或您用来触发服务器端事件的任何元素,并在进程结束时从服务器端调用 stopLoader()。像这样的东西:
//rest of the server-side code above ...
Page.ClientScript.RegisterStartupScript(this.GetType(), "someKey", "stopLoader();", true);
如果您不介意浏览器在此期间没有响应,那么最简单的方法是使用动画 gif:
诀窍是在开始处理时显示图像,并在完成时隐藏它。您可以在 img 中显示它,并使用 jQuery 或任何您想要显示/隐藏它的东西。
如果您需要浏览器保持响应,请使用 Web Workers。但请注意,一些较旧的浏览器不支持它。请参阅此参考
是的,我已经在 ASP.NET Web From(不是 ASP.NET MVC 解决方案)中完成了这项工作。您需要提供 OnSubmit 客户端事件处理程序。它基本上分为三个部分:Javascript,HTML Div,以及后面的一行代码:
Javascript:
function ShowLoading(e) {
// var divBg = document.createElement('div');
var divBg = document.getElementById('blockScreen');
var divLoad = document.createElement('div');
var img = document.createElement('img');
img.src = 'images/ajax-loader.gif';
divLoad.setAttribute("class", "blockScreenLoader");
divLoad.appendChild(img);
divBg.appendChild(divLoad);
document.getElementById('blockScreen').style.display = 'block';
// These 2 lines cancel form submission, so only use if needed.
//window.event.cancelBubble= true;
//e.stopPropagation();
}
function HideLoading() {
//alert('hideloading');
document.getElementById("form1").onsubmit = null;
document.getElementById('blockScreen').style.display = 'none';
//alert('done');
}
添加以下DIV
<div id="blockScreen" class="blockScreen" style="display:none"> </div>
最后,在后面的代码中将以下内容添加到 Page_Load 中。
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "submit", "ShowLoading()");
现在,您所有的页面回发基本上都必须调用 onsubmit 事件。它将在页面回发完成之前显示动画。