2012-06-19 153 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', ''); 
} 
相關問題