2012-06-19 109 views
0

在我的asp.net应用程序中,两个按钮调用一个名为refreshView的javascript函数,下面是函数refreshView。__doPostBack不能在safari或firefox中工作,在IE浏览器中工作

function RefreshView() { 
         __doPostBack('ButtonApply', '') 
         window.parent.location.href = "dashboardtree.aspx" 
        } 

在IE浏览器,这是工作正常,但在Firefox和Safari网页刷新(由于window.parent.location) - 但从未调用doPostBack(我能告诉这使用跟踪点和被称为将值存储到数据库的子元素,值也没有被存储,子元素从未被击中)。以下是该子的第一行。

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

任何人都可以看到为什么这不起作用?我想我总是可以用pageMethods替换doPostBack并创建一个新的子/函数 - 但我想按照它现在的方式来完成它。谢谢。

回答

3

不要在JavaScript例程中同时执行重定向和回发。你应该做的是在你的回传逻辑完成后重定向。你只会知道它在Codebehind中完成的时间,或者你的Javascript收到某种异步回调。在当前状态下,您的JavaScript例程不知道您的Postback何时完成。

您正在创建冲突。你实质上做的是告诉页面发布,并在同一时间在其他地方重定向。由于这个事实,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来调用服务器端方法来执行您的逻辑(您目前在回发中执行的方法)。完成后,当过程完成时(以及是否成功),客户将在回调中收到通知。成功完成后,您将执行重定向。

有在网络上的这几个例子,我会为你提供一些:

+0

你是正确的,删除​​window.parent.location.href将允许sub被击中。现在我怎样才能让页面刷新,就像点击刷新按钮一样?回发或不是无关紧要,因为子使用doPostBack命中并将我需要的值存储到数据库,这些值在页面加载期间从数据库中拉回。 – njj56

+0

关于响应。重定向 - 这对我不起作用,因为包含回发的页面是另一个页面内的iframe,之前我使用了window.parent.location.href,但是我应该用什么呢?我需要刷新父母,而不是当前。 – njj56

+0

啊道歉,我错过了window.parent。那么最适合你的是使用ajax来调用一个方法来代替回发来执行处理。完成后,您将收到来自ajax的回调。一旦你收到ajax回调,那么你会做window.parent重定向。 – Jeremy

0

为了执行方法在每次回发完成后,您可以通过PageRequestManager将该方法添加到处理程序列表中。 (请参阅: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', ''); 
} 
相关问题