0

私のasp.netアプリケーションでは、2つのボタンがrefreshViewというjavascript関数を呼び出します。以下はrefreshView関数です。

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

IE では、これは正しく機能していますが、firefox と safari ではページが更新されます (window.parent.location のため)。データベース、値も保存されていません。サブはヒットしません)。以下は、サブの最初の行です。

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

なぜこれがうまくいかないのか誰にもわかりますか?いつでも doPostBack を pageMethods に置き換えて、新しいサブ/関数を作成できると考えましたが、現在の方法でこれを完了したいと思います。ありがとうございました。

4

2 に答える 2

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 を使用して、(現在ポストバックで行っている) ロジックを実行するサーバー側メソッドを呼び出します。完了すると、プロセスが完了したとき (およびプロセスが成功したかどうか)、クライアントにコールバックで通知されます。正常に完了したら、リダイレクトを実行します。

この例はウェブ上にいくつかあります。いくつかを紹介します。

于 2012-06-19T18:43:11.940 に答える
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', '');
}
于 2012-06-19T19:12:21.370 に答える