■68269 / inTopicNo.8) |
Re[4]: Server.Transferによる遷移とAjaxイベント |
□投稿者/ fumo (4回)-(2013/10/04(Fri) 17:07:56)
|
■No68263 (WebSurfer さん) に返信 > > 以下のケース(UpdatePanel を配置したページで Server.Transfer を使ってい > る)とは違いますよね? このケースでも 404 エラーになるそうです。もし、 > このケースであれば、Response.Redirect を使う以外に現実的な解決策はありま > せん。 > > No, you cannot call Server.Transfer on an ASP.NET AJAX enabled page > http://msmvps.com/blogs/luisabreu/archive/2007/10/10/no-you-cannot-call-server-transfer-on-an-asp-net-ajax-enabled-page.aspx > > > 上記のケースとは違って、遷移先のページで UpdatePanel を使っているという > ことですか? 例えば、以下のページの図16.2 で、UpdatePanel を使っている > のは sampleB.aspx で、そのページを構築する際 asmpleA.aspx のデータを使用 > しているということですか? >
はい、おおむねその通りですが、sampleB.aspxでsampleA.aspxの値を使用しなくても(Previous Pageの取得等もしていない) 同様のエラーは発生します。
> そうだとすると、最初に sampleB.aspx から html ソースがブラウザに送信され > た後で、ブラウザが sampleB.aspx に非同期要求を出した時には sampleA.aspx > はサーバーのメモリには存在しないので、sampleB.aspx(これは非同期要求を受 > けると再度サーバーのメモリにロードされます)で、asmpleA.aspx のデータを取 > 得できないのでエラーになるということではないかと思います(想像です)。 > > ただ、一度通常のポストバック(同期要求と理解)が発生するとエラーが出ないの > はつじつまが合わないですが。 >
通常のポストバックでエラーが解消されるのが、確かに一番意味が不明な部分ではありますね。
> > セッションやクエリ文字列を使わない理由は、単にめんどくさいからということ > のようですが、その程度の理由しかないのであれば、普通にセッション等に前画 > 面のデータを保持し Response.Redirect で遷移することをお勧めします。 > > ASP.NET Web Forms アプリでの画面遷移は Response.Redirect を使うのが基本で > す。Server.Transfer をつかうのはよほどの理由(例えば、GetLastError メソッ > ドを利用してのエラー処置とか、SEO 対策とか)がない限り止めた方が無難です。 > > Web アプリケーション開発では、Post/Redirect/Get (PRG) パターンを使うこと > が基本ということもありますし。 > > Post/Redirect/Get > http://en.wikipedia.org/wiki/Post/Redirect/Get
すみません、それ以外にも理由がありまして、
@ブラウザの「戻る」機能を使わせないために、画面遷移ごとにセッション変数へPreviousPageのオブジェクトを画面遷移履歴として保存しておき、画面に実装したボタン を押下した際に、セッション変数の最新履歴からPathを取得してServer.Transferでひとつ前の画面に遷移、さらに最新履歴から各コントロールを取得して表示されていた 値の復元を行うという機能を実装しているため、PreviousPageを利用したい。 (戻るボタンが利用できると、常に最新のデータを表示しておきたい画面で、キャッシュから復元された古い情報が表示されてしまう可能性がある。) APostBackUrlを指定した遷移だと、「データ入力画面で保存ボタン押下⇒データ保存(処理)⇒トップ画面に戻る(遷移)」といった処理を一つのイベントで実装できない。 (遷移元画面の処理実行前にPostBackUrlのリンク先に遷移してしまう)
上記2つの理由があるため、Server.Transferで遷移を行いたいと考えております。
(情報が小出しになってしまい申し訳ありません)
Server.TransferとAjaxはうまく使えないものなのでしょうか…。
|
|