2013-03-20 79 views
1

我有一個主要的「報告」頁面,有一些用戶可以採取的行動,將打開模態RadWindow,讓用戶採取行動,然後單擊保存,模式窗口將關閉,主要網格刷新。莫代爾RadWindow在Chrome中不關閉

在IE和Firefox中均可正常工作,但Chrome會執行所有「工作」,但模態頁面保持打開狀態。這隻有當我點擊保存按鈕時纔是真的;窗體頂部的取消按鈕和關閉按鈕仍可正常工作。

這是從子窗口中的JavaScript:

<script type="text/javascript"> 
    function GetRadWindow() { 
     var oWindow = null; 
     if (window.radWindow) 
      oWindow = window.radWindow; 
     else if (window.frameElement.radWindow) 
      oWindow = window.frameElement.radWindow; 
     return oWindow; 
    } 

    function CloseRadWindow() { 
     var oWnd = GetRadWindow() 
     oWnd.SetUrl(""); 
     oWnd.close(); 
    } 

    function CloseAndRebind(args) { 
     var oWnd = GetRadWindow() 
     oWnd.BrowserWindow.refreshGrid(args); 
     oWnd.SetUrl(""); 
     oWnd.close(); 
    } 
</script> 

這是父母的refreshgrid功能:

<script type="text/javascript"> 
     function refreshGrid(arg) { 
      if (!arg) { 
       $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>").ajaxRequest("Rebind"); 
      } 
      else { 
       $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>").ajaxRequest("RebindAndNavigate"); 
      } 
     } 
    </script> 

家長通過運行加載模態窗口:

protected void btnSplitInvoice_Click(object sender, EventArgs e) 
    { 
     var btn = sender as Button; 
     var item = (GridDataItem)btn.Parent.Parent; 

     long id = long.Parse(item["Id"].Text); 
     var itemType = this.TabStrip1.SelectedIndex == 0 ? "TransferOrderInvoice" : "EquipmentInvoice"; 

     string scriptstring = "var oWindow=radopen('../Misc/SplitInvoice.aspx?id=" + id + "&type=" + itemType + "','SplitInvoice');oWindow.SetModal(true);"; 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "openwindow", scriptstring, true); 
    } 

孩子的保存按鈕在後面的代碼中完成了大量的工作,然後完成:

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", true); 

取消按鈕被設置爲這樣:

<button type="button" class="CancelBtn" value="" onclick="CloseRadWindow()"> 
         </button> 

我發現從一段時間回來,暗示將window.open('', '_self', '');到接近一個條目,但似乎並沒有適用的(也沒當我測試它的時候,它不工作)。

編輯:當控制檯打開安裝Chrome,我看到我的主網頁上得到一個錯誤,當refreshgrid運行:

Cannot call method 'ajaxRequest' of null

但不知道這是什麼引起的問題與否。現在看更多。

編輯2:所以這個問題似乎是,當使用Chrome瀏覽器時,主頁面上的RadAjaxManager似乎沒有被refreshGrid運行時發現,這就是上述空錯誤的原因。我可以通過用document.location.reload();代替refreshGrid函數的內核來「解決」這個問題,它確實很好。但是,如果我能夠幫助它,我寧願不重新加載整個頁面,但是,想知道是否還有辦法解決這個問題。而且我很好奇,爲什麼IE瀏覽器和Firefox似乎在Chrome瀏覽器不支持時處理這個問題?

更多的信息,可能是有用的:主要頁面的Page_Load事件:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      this.Session["AllUserLocationValue"] = string.Empty; 

      this.InitializeThePage(); 
     } 

     RadAjaxManager manager = RadAjaxManager.GetCurrent(this.Page); 
     manager.AjaxRequest += this.manager_AjaxRequest; 

     manager.AjaxSettings.AddAjaxSetting(manager, this.pnlHeading, this.RadAjaxLoadingPanel1); 
     manager.AjaxSettings.AddAjaxSetting(manager, this.RadCodeBlock1, this.RadAjaxLoadingPanel1); 

    } 

回答

1

OK,我發現,Chrome並始終不渝地把「失去」的報道頁面的主頁面參考,或至少在那裏,而Firefox和IE瀏覽器不(我可以跟蹤和觀看$爲他們找工作)。

但是,我發現Chrome(和其他兩個)可以始終如一地找到報告的主要網格(這正是refreshGrid最終尋找的內容)。所以,我能夠與取代的refreshGrid膽量:

function refreshGrid(arg) { 
      var radgridNotApproved = $find("<%= rgNotApproved.ClientID %>").get_masterTableView(); 
      radgridNotApproved.rebind(); 
     } 

,讓我一直在尋找的行爲。它也更清潔; refreshGrid的原始版本看起來像它原本打算做的不僅僅是重新綁定網格,但當我看着它的時候,這就是它真正做的。

1

刪除調用SetUrl(「」),因爲它開始處置當前頁和瀏覽器是否足夠它快將不會接到致電close()。

如果您需要導航的RadWindow遠離你可以使用這三個選項

  • 設置其ReloadOnShow屬性設置爲true之一。通常與ShowContentDuringLoad = false一起

  • 將DestroyOnClose設置爲true。請小心使用和之前關閉添增超時()

  • 使用OnClientClose事件的URL設置爲空白頁

+0

感謝您的建議re:'SetUrl(「」)';它在這種情況下並沒有影響到這個問題,但是根據你的解釋我可以看到不使用它的價值。這個問題似乎是在refreshGrid中的$ find找不到母版頁的RadAjaxManager的ClientId,盡我所知。 – 2013-03-26 17:59:38

+1

這很奇怪。嘗試製作一個單獨的函數,它將返回此引用並確保其腳本標記不是任何部分回發的一部分;或一個全局的JS變量,它將保存管理器的CLIentID,所以你可以很容易地調試它以獲得所需的ID。 您也可以使用簡單的__doPostBack()或隱藏按鈕並單擊()。 – rdmptn 2013-03-27 08:19:21