我有一個主要的「報告」頁面,有一些用戶可以採取的行動,將打開模態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);
}
感謝您的建議re:'SetUrl(「」)';它在這種情況下並沒有影響到這個問題,但是根據你的解釋我可以看到不使用它的價值。這個問題似乎是在refreshGrid中的$ find找不到母版頁的RadAjaxManager的ClientId,盡我所知。 – 2013-03-26 17:59:38
這很奇怪。嘗試製作一個單獨的函數,它將返回此引用並確保其腳本標記不是任何部分回發的一部分;或一個全局的JS變量,它將保存管理器的CLIentID,所以你可以很容易地調試它以獲得所需的ID。 您也可以使用簡單的__doPostBack()或隱藏按鈕並單擊()。 – rdmptn 2013-03-27 08:19:21