在我的asp.net应用程序中,两个按钮调用一个名为refreshView的javascript函数,下面是函数refreshView。
function RefreshView() {
__doPostBack('ButtonApply', '')
window.parent.location.href = "dashboardtree.aspx"
}
在IE中,这是正常的,但在firefox和safari中页面刷新(由于window.parent.location) - 但从不调用doPostBack(我能够使用tracepoint和被调用的sub来告诉它)将值存储到数据库中,值也不会被存储,sub永远不会被命中。以下是该子的第一行。
Private Sub ButtonApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonApply.Click
谁能明白为什么这不起作用?我想我总是可以用pageMethods替换doPostBack并创建一个新的子/函数 - 但我想以它当前的方式完成它。谢谢。
答案 0 :(得分:3)
不要在JavaScript例程中同时执行重定向和回发。你应该做的是在你的回发逻辑完成后重定向。您只会知道它何时在Codebehind中完成,或者您的Javascript是否收到了某种异步回调。在当前状态下,您的JavaScript例程不知道何时完成回发。
您正在制造冲突。你实际上在做的是告诉页面发布,同时重定向到其他地方。由于这一事实,FireFox和Safari很可能忽略了__doPostBack()
。
以下是我要做的事情:
public void Page_Load(object sender, EventArgs e)
{
string target = Request["__EVENTTARGET"];
//if parameter equals "ButtonApply"
//{
// Do whatever, Then...
// Response.Redirect("dashboardtree.aspx"); <- you may need to modify the url depending on your structure
//}
}
修改强>
...about the response.redirect - this will not work for me because the page that contains the post back, is an iframe inside another page...
道歉,我错过了window.parent。
我建议使用ajax。简而言之,您将使用ajax调用服务器端方法,该方法将执行您的逻辑(您目前在回发中执行)。完成后,当流程完成(以及是否成功)时,将通过回调通知客户端。成功完成后,您将执行重定向。
网上有几个例子,我会为你提供一些:
答案 1 :(得分:0)
为了在每个回发完成后执行一个方法,您可以通过PageRequestManager将该方法添加到handlerlist中。 (见:http://msdn.microsoft.com/en-us/library/bb311028) 执行该方法后,您可以根据需要将其从处理程序列表中删除。
function Reload() {
Sys.WebForms.PageRequestManager.getInstance().remove_pageLoaded(Reload);
window.parent.location.href = "dashboardtree.aspx";
}
function RefreshView() {
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(Reload);
__doPostBack('ButtonApply', '');
}