2

更新パネルと部分的なポストバックを処理するためのコードビハインドイベントハンドラーを備えたasp.netWebフォームがあります。このような場合、Sys.WebForms.PageRequestManager.getInstance.add_endRequestメソッドは、ページがブラウザーによって部分的にレンダリングされると、正常に実行されます。

問題は、これらのイベントの1つでResponse.Redirect行をコードビハインドに配置すると、Sys.WebForms.PageRequestManager.getInstance.add_endRequestイベントが実行されないことです。このため、ページの実行が完了した後も、ビジーアニメーションが表示され続けます。

特に、コードビハインドイベントハンドラーはユーザーをファイルにリダイレクトします。これにより、ブラウザーがそのファイルを効果的にダウンロードします。そのファイルが画像ファイルである限り、画像がブラウザの同じウィンドウに表示されるため、すべてが正しく機能します。この問題は、ファイルがブラウザがmsofficeで開きたいmsofficeファイルである場合に発生します。ユーザーがダイアログボックスで[開く]または[保存]をクリックすると、ファイルがms officeで開かれるか、ファイルシステムに保存されますが、Sys.WebForms.PageRequestManager.getInstance.add_endRequestが実行されないため、ページはビジー状態のままになります。

4

3 に答える 3

1

問題は、リクエストが部分的なページリクエストであることに関係しています。彼らはファイルをダウンロードしているので、それらを部分的にすることによって得られる利益はありません。代わりに、PostBackTriggersとして追加するか、ScriptManagerのRegisterPostBackメソッドをプログラムで使用して、「ボタン」が完全なポストバックをトリガーするようにします。

于 2012-06-02T09:36:43.560 に答える
0

良い質問。私の提案は、ページitslefでresponse.redirectを実行する代わりに、新しいウィンドウでファイル/imageに移動するjavascriptをレンダリングすることです。ファイルが新しいウィンドウに自動的にダウンロードされ、Sys.WebForms.PageRequestManager.getInstance.add_endRequestがトリガーされるようにします。

これがうまくいくことを願っています。

于 2012-06-02T09:20:34.343 に答える
0

私は解決策を見つけました。この場合、インテントが別のページへのリダイレクトである場合、現在のページの状態/データ/ GUIを維持する必要がないため、実際には部分的なポストバックは必要ありません。リダイレクションの決定が最終的ではなく条件付きである場合、これは解決策ではありません。

簡単な答えは、部分的なポストバックではなく、完全なポストバックを実行することです。ポストバックを実行するには、更新パネルのポストバックトリガーリストにコントロールを追加するか、プログラムで追加します。

protected void gvDocumentListGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.DataItem != null)
        tsm.RegisterPostBackControl(e.Row.FindControl("lbNameFileGrid"));
}

ページにtsmと呼ばれるツールキットスクリプトマネージャー、gvDocumentListGridと呼ばれるグリッドビュー、およびテンプレートフィールドコントロールlbNameFileGridがある場合。

于 2012-06-02T09:41:26.303 に答える