在我的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/