ユーザーがモーダル RadWindow を開き、ユーザーにアクションを実行させ、[保存] をクリックすると、モーダル ウィンドウが閉じてメイン グリッドが更新されるアクションを含むメインの「レポート」ページがあります。
これは 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
しかし、それが問題の原因であるかどうかはわかりません。今それをもっと調べてください。
EDIT2: したがって、問題は、Chrome を使用している場合、実行時にマスター ページの RadAjaxManager が見つからないように見えることですrefreshGrid
。これが上記の null エラーの理由です。refreshGrid 関数の内臓を に置き換えることで問題を「修正」することができましたが、問題はdocument.location.reload();
ありません。できればページ全体をリロードしたくないので、これを修正する方法があるかどうか疑問に思っています. Chrome が処理しないのに IE と Firefox が処理するように見えるのはなぜですか?
役に立つかもしれない詳細情報: メイン ページの 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);
}