javascript - __doPostBack 在 safari 或 firefox 中不起作用,在 IE 中起作用

标签 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 (我能够使用跟踪点和调用的 sub 来告诉它将值存储到数据库中,这些值也不会被存储,子永远不会被命中)。下面是子代码的第一行。

 Private Sub ButtonApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonApply.Click

有人能明白为什么这不起作用吗?我想我总是可以用 pageMethods 替换 doPostBack 并创建一个新的子/函数 - 但我想以当前的方式完成此操作。谢谢。

最佳答案

不要在 JavaScript 例程中同时执行重定向和回发。您应该做的是在回发逻辑完成后重定向。您只会知道它何时在代码隐藏中完成,或者您的 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 来调用服务器端方法,该方法将执行您的逻辑(当前在回发中执行的操作)。完成后,当该过程完成(以及是否成功)时,客户端将在回调中收到通知。成功完成后,您将执行重定向。

网上有几个这样的例子,我为您提供一些:

关于javascript - __doPostBack 在 safari 或 firefox 中不起作用,在 IE 中起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11107163/

相关文章:

javascript - 查找最近的元素,而不是最近的元素

javascript - WebStorm IDE的高效使用

asp.net - 如何使 TemplateField 只读,直到按下编辑按钮?

c# - 更改服务器机器时输入字符串的格式不正确错误

mysql - vb.net缓存数据库表

javascript - React JS - 未捕获的 NotFoundError : Failed to execute 'insertBefore' on 'Node' :

javascript - 使用javascript检测选择结束位置

.net - FOR XML 要求的无效 XML 标识符

c# - 使用Session存储Datatable

javascript - .NET 部分回发后更新 javascript 变量