- PR -

ページ間のサーバーコントロール受け渡し

投稿者投稿内容
elmo
常連さん
会議室デビュー日: 2002/08/09
投稿数: 47
投稿日時: 2002-08-12 20:34
大変困っていますのでご回答をよろしくお願いします。

ページからページへ、値を渡す方法を教えてください・・・。
やはりHTTPを使わなければ、値を渡すことはできないのでしょうか。
テキストボックスに検索のキーを入力してもらい、別ページ(同じページにできない仕様なのです)にて表示したいのですが、普通にとることはできませんでした。
やはりhttp経由になるのでしょうか?
また簡単に実現できるものなのかを教えていただけるとありがたいです。

.netのヘルプにてページ間のサーバーコントロール受け渡しのページがあり、現在試し中なのですが、あまりにややこしく、こんな方法しかないのかな?と疑問に思い投稿させていただきました。簡単な方法があればぜひお教えください!
よろしくお願いします。
かなめ
会議室デビュー日: 2002/07/15
投稿数: 16
お住まい・勤務地: 東京
投稿日時: 2002-08-13 10:14
サーバーコントロールの受渡ですが、
私はOnClickのところで、Session変数に全て値を格納してから、
Response.RedirectやServer.Transferを使用して画面遷移しています。

他にも良い方法があるのかもしれませんが、
研修とか行っても講師がこの方法でやっているから、
これがベストなのかなと思っています。
elmo
常連さん
会議室デビュー日: 2002/08/09
投稿数: 47
投稿日時: 2002-08-13 15:01
回答ありがとうございます!

セッション変数は調べていたのですが、セッション変数を使うデータというのはログイン処理などで使用するユーザー名やパスワードのような複数の画面で使用する変数にはすごくいいと思います。
ですが検索など一画面もちこすだけで、セッションに残すようなデータではない場合はやはりHttpRequestをつかったほうがいいかなという気持ちになっています。
(セッション、httpRequestのほかにやり方ってありますか? あったらぜひ教えてください)

多く使われる機能だと思うので、みなさんがどのように使っているか知りたいです。
またweb開発をしていた私にとって、asp.netはまだまだわけのわからないことだらけです。
でもがんばって習得したいです!
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-13 15:14
ページ間のサーバーコントロール受け渡しは、ASP.NET中最大の難題(?)ですよねぇ。方法論そのものはいろいろと考えられると思いますが、僕自身は結局以下の3つのどれを選択するかになっています。

1.Request.QueryString(""):GETでの値渡し。server.transferなどででもそのまま使えるので、一番気楽。遷移がユーザーによらない場合には最適かなと。商品リストから商品詳細みたいなパターン。

2.request.Form(""):POSTでの値渡し。コントロールの値渡しの標準でしょうか。但し、ASPX内のFORMタグを書き換える必要があるのと、受け取り側での処理を書くのが一番面倒。

3.セッション変数:COOKIEベースが標準。買い物籠でもユーザー処理でも、もってこい。でも、サーバーのメモリが減ってゆく(苦笑)。やはりこれからのWEBサーバの実装メモリは莫大に積んだ方がいいっすね。最低1Gとか(苦笑)

検索での値渡しだと確かにrequest.formが適当に見えるのですが、実際のコーディングの楽さ
加減ではセッション変数が楽です。それにセッション変数の場合、検索結果のページからいくつかページをまたいでも、いつでも検索結果のページに戻れるという利点もあります。必要が無くなったら解放すればいいですし。

しかし、こうやって書いてみると、ASPの時となんら変わってないという(苦笑)
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
TK
常連さん
会議室デビュー日: 2002/08/13
投稿数: 42
投稿日時: 2002-08-13 15:20
はじめましてTKです。私も当初(製品発売当初です)は
server.transfer自体知らなかったので、GETでURLに変数をくっつけて
Response.Redirectで送るか
「Response.Redirect( "xx.aspx?Param1=zz&Param2=xx" );
な感じです。」
Session変数に入れていました。
ASPでは<Form action=送信先のURL>でいけてましたが、
ASP.NETでは送信先は自ページなので無理です。
FormがPostbackされたときいくつかの入力項目を受け取っているとします。この入力項目をinput.aspxで処理した後さらにoutput.aspxという次に遷移するページでも利用したい場合は
@input.aspx
<form id="WebForm1" method="post" runat="server">
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>

Ainput.aspx.cs
private void Button1_Click(object sender, System.EventArgs e){
Server.Transfer("output.aspx", true ); }

Boutput.aspx.cs
InputValue = Request.Form["TextBox1"];
でいけると思います。

また、
input側で(cs file)
Context.Items["Name"] = "なまえを書く"; // Itemsに名前を決めて値を代入
Context.Server.Transfer( "output.aspx" ); // これでページ遷移
として
output側で
InputValue = Context.Items["Name"].ToString();
で値を受け取れます。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-13 15:33
>ASPでは<Form action=送信先のURL>でいけてましたが、
>ASP.NETでは送信先は自ページなので無理です。

いやいや、もちろんASP.NETでも<Form action=送信先のURL>でいけますよー。手で書かなければいけないだけです。また、ブラウザーの種類によってはTARGETが使えますので、フレームが分かれてても大丈夫です。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
TK
常連さん
会議室デビュー日: 2002/08/13
投稿数: 42
投稿日時: 2002-08-13 15:40
>いやいや、もちろんASP.NETでも<Form action=送信先のURL>でいけますよー。手で書か
>なければいけないだけです。また、ブラウザーの種類によってはTARGETが使えま
>すので、フレームが分かれてても大丈夫です。

いけるんですか。すみません知りませんでした(汗
ちなみに出来なかった私は、何がいけなかったのでしょうか・・・?
手で書かなければと言うと事がポイントですか?
もしよろしければ、教えていただけないでしょうか。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-08-13 16:45
>手で書かなければと言うと事がポイントですか?
>もしよろしければ、教えていただけないでしょうか。

ぐはぁっ!すみません!書き込みを見てから、色々やってみたところ

*FORMタグのRUNAT=SERVERを外さなければいけない。
*ということはWEBフォームコントロールは使えない→HTMLコントロールをサーバサイドでは使える
*けど、ボタンはSUBMITとRESETしか反応しないっぽい(POSTBACKしない(当たり前))
*なんで、あまり使えない

ということが判明しました!(泣)紛らわしい書き方になってしまい恐縮です。

今まで作った開発物のソースを見てみても、意識無しに上手く逃げてる逃げてる(苦笑)TARGETは使ってますが、ACTIONは使ってない(苦笑)

というか、ASPの時にも直接FORMタグで他のASPに遷移させず、自分のASPに戻してそこで処理してからRESPONSE.REDIRECTが多かったので気になってなかったようです(泣)

じゃあ、検索条件がメッチャ多い時にURLの後ろにつけるのか?見てみると

1.検索条件を格納するSTRINGのコレクションを作って、セッション変数にまるごと格納。
2.検索ページそのもので、データベース検索処理を行って、データビューに結果を書いて、データビューごとセッション変数に格納。

えー、やはりサーバにはメモリをたくさん積みましょう。最低512MB(笑)。TKさん大変失礼しました。


_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------

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