我<asp:Button ID="btnExport">
在 UpdatePanel 中有一个控件。单击该按钮时,我希望它立即执行 Javascript 函数(它是一个轮询函数,在 UpdatePanel 进行回发时将连续运行)。我怎样才能做到这一点?
我试过这个:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);
function pageLoaded(sender, args) {
$(".btnExport").click(function (e) {
timer = window.setInterval(pollStatus, 1000);//
});
}
那行得通,但是它不执行 btnExport 事件处理程序。我尝试的一切要么执行事件处理程序而不是轮询函数,反之亦然。我真正在寻找的是一种方法来做到这一点:
1) 单击导出按钮。
2)设置一个计时器每秒做一个轮询事件(javascript函数)。
3) 执行导出按钮的事件处理程序。
4) 回发完成后,清除计时器。
任何人对完成此任务的最佳方法有任何建议吗?
这是一些示例代码。这是我为了说明这一点而编写的一个小示例应用程序,我的实际应用程序有点过于复杂,无法在此处发布。
默认.ASPX
<asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="UpdatePanel1">
<ContentTemplate>
<asp:Button runat="server" ID="btnExport" Text="Begin Export" OnClick="btnExport_Click" ClientIDMode="Static" /><div id="message"></div>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
var timer;
function pollStatus() {
$.ajax({
type: "POST",
url: "<%= Page.ResolveUrl("~/Default.aspx/PollStatus") %>",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
$("#message").html(response.d);
}
});
}
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(pageLoaded);
function pageLoaded(sender, args) {
$("#btnExport").click(function (e) {
timer = window.setInterval(pollStatus, 50);
});
}
</script>
默认的.ASPX.CS
protected void btnExport_Click(object sender, EventArgs e)
{
for (int i = 1; i <= 10000000; i++ )
{
Session["PollStatus"] = i;
}
}
[WebMethod]
public static string PollStatus()
{
return HttpContext.Current.Session["PollStatus"] != null ? HttpContext.Current.Session["PollStatus"].ToString() : "No result";
}