- PR -

Server.Transfer以外のページ遷移

投稿者投稿内容
ひろ
会議室デビュー日: 2004/01/29
投稿数: 13
投稿日時: 2004-01-29 00:44
ASP.NET初心者の ひろ と申します。
現在、ASP.NETでのページ遷移について、試行錯誤していて
やり方が本当にあっているかどうか、分からなくなってきて
しまいましたので、お知恵を拝借させてください。
(何か根本的な考え方の間違い等もあればご指摘いただければ
嬉しいです ^-^;)

基本的な方針としては
 ・POSTを使用
   ← Server.Transfer/Context.Server.Transfer では
    F5で画面更新しようとすると呼びだし元の画面のPage_Loadから
    処理が走る(アドレスバー表示も呼びだし元の画面のまま)
 ・ボタンクリックイベントで自画面の項目チェック,更新処理をおこなう
 ・その後画面遷移

と考えて作成しています。

実装は  
 ・自分でHTMLのフォームを作成しておき、
 (runat=server のフォームは action="XXXX.aspx" と設定しても
 無効のため)
 ・ボタンClickイベントで 処理が正常終了したらフラグ(hidden で
 設定しておく)をONにする
 ・POSTしたいデータをhidden項目にサーバーコードからセット
 (# HTML-hiddenは「サーバーコントロールとして実行」にしておく)
 ・HTMLのBODY onload で 処理が正常終了したかどうかのフラグを
 見に行く処理を書き、OKならダミーフォームをsubmit し、画面遷移する
  
のような感じで現在コーディングしています。
なんだかまわりくどい気がするのですが、もっとスマートな方法は
ないものでしょうか。

あと、なんだか本をみたりしても Server.Transfer が多く書かれているのですが、
個人的には、、、、 なんとなく気持ち悪いのですが、皆さんはいかがでしょうか。
へちま
会議室デビュー日: 2004/01/22
投稿数: 10
投稿日時: 2004-01-29 08:40
Response.Redirect

を使ってみてはどうでしょう。
ひろ
会議室デビュー日: 2004/01/29
投稿数: 13
投稿日時: 2004-01-29 09:11
へちまさん、書き込みありがとうございます。

Response.Redirect をつかうというのは、
データを遷移先に渡したいときにはQueryStringをつける、
というやり方ですよね?
ex) Response.Redirect("XXXX.aspx?txt1=(値)&txt2=(値)");

ただし、これだと、アドレスバーを非表示にしていればともかく、
QueryStringが表示されてしまうので、できればあまり使いたくないのです。

わがまま言って申し訳ありません..
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-01-29 09:37
引用:

ただし、これだと、アドレスバーを非表示にしていればともかく、
QueryStringが表示されてしまうので、できればあまり使いたくないのです。



まぁ、最悪、Session変数に値を格納してPOSTを偽装するという方法もありますが・・・

多人数で使うのであったり、大量のデータ(といってもフォーム入力じゃあまり大量にもならないような気もするけど)を渡すとかいうのであればこの方法はお勧めできません。

まぁ、どれくらいのデータの遷移だかがわからないので、とりあえずこういう方法もあるよ、程度に考えておいてください。

#大量のデータをPOSTで送信するのであれば素直にtransferを使うことをお勧めします。

[ メッセージ編集済み 編集者: 無月 重造 編集日時 2004-01-29 09:38 ]
ひろ
会議室デビュー日: 2004/01/29
投稿数: 13
投稿日時: 2004-01-29 21:15
無月 さん、書き込みありがとうございます。

//まぁ、最悪、Session変数に値を格納してPOSTを偽装するという方法もありますが・・・
そうですね、Session変数で全部やってしまえばページ間が云々、といった
気を遣う必要はなくなりますよね。

//#大量のデータをPOSTで送信するのであれば素直にtransferを使うことをお勧めします。
transferもしくはQueryString使用 が一般的なやり方なんでしょうね。


あちこち見た印象では
 同一ウィンドウ内でページ遷移時は Server.Transfer / Response.Redirect
 新規WindowOpenするときは javascriptで window.Open("URL?txt1=(値)");

POST処理が言及されているのは少ないですね...
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-01-30 09:37
引用:

ひろさんの書き込み (2004-01-29 21:15) より:
あちこち見た印象では
 同一ウィンドウ内でページ遷移時は Server.Transfer / Response.Redirect
 新規WindowOpenするときは javascriptで window.Open("URL?txt1=(値)");

POST処理が言及されているのは少ないですね...



そもそも、POSTというのはSubmitに対して行われる処理ですけど
ASP.NETでは、sbumitの対象として指定されるべきformのactionの値は自分自身ですから・・・他のウィンドウに対してPOSTするってのは本来の用途として外れてるので、言及されてないのではないかとおもいます

[ メッセージ編集済み 編集者: 無月 重造 編集日時 2004-01-30 11:20 ]
ひろ
会議室デビュー日: 2004/01/29
投稿数: 13
投稿日時: 2004-01-30 21:03
Webフォームを新規作成で作ったときのフォーム初期設定が 
runat=server(そして自分自身にPOST)ということを考えると、
私の考え方はイレギュラーみたいですね

ただ、ふとまた分からなくなりました。
ある画面があって、その画面のボタンClickイベントで
画面内項目のチェックやDB登録処理をおこなったあと、
新規画面をOpenして、データを引き渡したい、というようなとき、
どのように記述すればよいのでしょうか。

サーバーサイドでチェックし、Server.Transfer()では
同一ウィンドウ内での遷移、になりますよね...?
 #どこかでなにか勘違いしてたらすいません..
無月 重造
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 67
投稿日時: 2004-02-02 09:44
お返事が遅れてしまい申し訳ありませんでした
引用:

ひろさんの書き込み (2004-01-30 21:03) より:
ある画面があって、その画面のボタンClickイベントで
画面内項目のチェックやDB登録処理をおこなったあと、
新規画面をOpenして、データを引き渡したい、というようなとき、
どのように記述すればよいのでしょうか。

サーバーサイドでチェックし、Server.Transfer()では
同一ウィンドウ内での遷移、になりますよね...?
 #どこかでなにか勘違いしてたらすいません..



そのあたりに関してはJavaScriptとSessionを駆使して実装できそうなきもしますが…
申し訳ないです、ちょっと試したことがないのでこれという回答ができません(汗

スキルアップ/キャリアアップ(JOB@IT)