__doPostBack无法在safari或firefox中运行,适用于IE

时间:2012-06-19 18:32:37

标签: javascript asp.net vb.net postback dopostback

在我的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并创建一个新的子/函数 - 但我想以它当前的方式完成它。谢谢。

2 个答案:

答案 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', '');
}