- PR -

ASP.NETでのページ間におけるデータの受け渡し

投稿者投稿内容
けい
会議室デビュー日: 2007/06/28
投稿数: 6
投稿日時: 2007-06-28 10:21
はじめまして。
今年から、この業界に入りました。
わからないことが多く、アドバイスを頂きたいと思い投稿させて頂きました。

現在、ASP.NETでページ間におけるデータの受け渡しを作っています。
開発環境はVisual Studio 2003(Frameworkは1.1)でVB.NETを使用しています。

内容は、ログイン画面より渡されたデータを認証し、
承認されればCookie、Post、Getのいずれか(どれにするかはWeb.configで設定)で、
別のページにそのデータを送り、
その遷移先のページでデータを取り出すというものです。

現在、認証、Cookie、Getは出来ていますが、Postがどうしてもうまくいきません。
色々なサイトを参考にしたり、Javascriptを利用したりもしているんですが。

下記が条件です。

・遷移先が.aspxでないのでServerTransferは使用不可。
 (↑はじめはServerTransferでformを保持させることで上手く言ったんですが、
  これが原因でダメになりました。)

・送るページと受け取り、取り出すページは別だということ。
 (↑同じページ間でならASP.NETでのPostのサンプルを見つけたんですが、
   別ページということで変数が保持できない等で上手くいきませんでした。)

・sleep等を利用して(チェックの為sleepを利用し一時停止させる)ソースを
 表示させた場合、データが表示されないこと。
 (↑javascriptを利用した際データをWebフォームのTextBoxにVBで保存し、
   HTMLのTextBoxに代入、Submit後actionを行っいました。
   IEなのでHTMLの方は表示されなかったがWebフォームは表示されてしまいました。
   IEではjavascriptで処理する前のものが表示されるからだと教えて頂きました。)

・Cookieの利用は不可。
 (↑上記のようにVBからTextBoxへ代入したのが問題となった為、
   Cookieを使い、javascriptで値を取り出せばソースに表示されないと
   考えました。
   しかし、Postとは別にCookieで送るというものがあるので、
   Cookieが使用できない場合にPostも使用できなってしまうという
   理由から不可との事。)

以上が今思い出せる、つまづいている原因です。
記入することはこういった感じで足りているでしょうか?
条件がまだあった場合、また記入させていただきます。

まだまだ基本も完全に出来ていない為、
もっと単純な事なのにわかっていないだけかもしれませんが、
どうかよろしくお願い致します。



どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-28 10:50
そもそもPOSTで別ページを呼び出せてますか?
ASP.NETは標準でポストバックといって自分自身にPOST呼び出しをするような
設定になっています。
これによってイベント等がサーバ上で判断できるようにつくられてます。

このため、POSTを利用して別ページを呼び出すには、標準的ではない形を
とる必要があります。
まぁ、runat=serverを記述しないformタグを設定すればとりあえずは
いいはずですが。

このあたりは問題ない、ということであれば、あとはデータの取り出し方の
ほうの問題のような気がします。
実際にページを呼び出したときにどのようなデータが送られているか、
ツール等を使って確認してみるのがよいのではないでしょうか。
けい
会議室デビュー日: 2007/06/28
投稿数: 6
投稿日時: 2007-06-28 11:43
お返事ありがとうございました。

行ったものは下記の2つの方法で、別ページのを呼び出しデータも送れています。

・Server.Transfer
まず、VBから値をsubmitし、ポストバック。
ポストバックならば Server.Transfer(遷移先URL,True) を実行する。
という処理を行った時は遷移が行われ、Trueと設定した為
formが保持され、Request.Form でデータが取り出せました。
開発時は自分で作ったダミーのWebForm.aspxというページだった為、
問題はありませんでした。
しかし、実際の組み込み先では.aspxではありません。
調べてみると、同一サーバ上の.aspxにのみServer.Transferは遷移が可能と
ありましたのでやり直しになりました。


・action
runat=serverの記述のあるformと記述が無くactionで遷移可能なformを作りました。
2つともある理由は、VBからデータを代入するとき、
runat=serverのあるformのTextBoxへは代入が出来ましたが、
無い場合はエラーとなったためです。
javascriptを利用し、VBからのデータをrunat=serverのないformの
TextBoxのformに代入、submit、actionによる遷移を行ったところ、
次のページへいき、Request.Form でデータが取り出せました。
しかし、この連携プログラムをInterner Explorerで実行中、
sleepで止め、ソースを表示させたところVBからの受け取りに使用した
TextBoxにvalue="データ"が見えてしまい、やり直しとなりました。

VBからのデータの渡し方がまずいので別の方法としてCookieを考えたのですが、
投稿したものに記入したとおりの理由から、ダメだと言われてしまいました。


以上の通り、何とか画面遷移・データの受け渡しはされてはいますが、
別の問題からダメになってしまいました。

他の方法も考えては見たのですが自分の知識が足りずなかなか見つからない状況です。
まだ新人の為、時間については言われませんが、
1ヶ月以上もかかってしまっています。

小さなことでも良いので何か方法等がございましたら、
ご指導よろしくお願い致します。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-28 13:01
actionを使った方法で画面上にデータが表示されるのが問題、というだけであれば、TextBox(type="text"のinputタグ)を使うのではなく、type="hidden"にすればいいんじゃないでしょうか。

#っと、ソースか。。。
 ソースにデータを含まずにPOSTでデータを渡す???
 そもそもできないような。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-06-28 13:03
引用:
・action
runat=serverの記述のあるformと記述が無くactionで遷移可能なformを作りました。
2つともある理由は、VBからデータを代入するとき、
runat=serverのあるformのTextBoxへは代入が出来ましたが、
無い場合はエラーとなったためです。
javascriptを利用し、VBからのデータをrunat=serverのないformの
TextBoxのformに代入、submit、actionによる遷移を行ったところ、
次のページへいき、Request.Form でデータが取り出せました。
しかし、この連携プログラムをInterner Explorerで実行中、
sleepで止め、ソースを表示させたところVBからの受け取りに使用した
TextBoxにvalue="データ"が見えてしまい、やり直しとなりました。

runat=serverのないフォームを作らずとも、submitする瞬間にjavascriptでactionを変更すれば
一応POSTパラメータを渡せますよ。

引用:
・sleep等を利用して(チェックの為sleepを利用し一時停止させる)ソースを
 表示させた場合、データが表示されないこと。
 (↑javascriptを利用した際データをWebフォームのTextBoxにVBで保存し、
   HTMLのTextBoxに代入、Submit後actionを行っいました。
   IEなのでHTMLの方は表示されなかったがWebフォームは表示されてしまいました。
   IEではjavascriptで処理する前のものが表示されるからだと教えて頂きました。)

これの意味がいまいちわからなかったのですがsleepってVBでのsleepですか?
また、なぜデータが表示されてはいけないのですか?
(ソースを表示ってのはブラウザで見るhtmlソースのことかな?・・)

.NET1.1では別ページへのPOSTはすんなりとは行かないですね。
普通はセッションに保持させたりします。

[追記]
別サイトにPOSTさせる必要がある場合はこのように無理やりやるしかないですけどね。

[ メッセージ編集済み 編集者: べる 編集日時 2007-06-28 13:07 ]
けい
会議室デビュー日: 2007/06/28
投稿数: 6
投稿日時: 2007-06-28 13:45
どっとねっとふぁん さま

aspのTextBoxではtypeと打ってみたところ、
type属性は無いと表示されてしまいました。
申し訳ありません、記入し忘れましたが、hiddenも使えないとの事でした。

送信に使っていたformの値はjavascriptで代入していたので表示されていません。
IEなのでjavascriptによる処理前のものが表示されると聞きました。
(sleepさせた位置の為だけかもしれませんが…)



べる さま

そうなんですか!?
無駄な処理が減るのは助かります。
ただ、VBから直接代入してしまう限りソースに表示されてしまうみたいで
納入は出来ないみたいです。

ブラウザ上で右クリック→ソースの表示というやつです。
sleepはVB側の遷移先の初めにセットしました。
開発している連携画面はonloadなどしか利用していない為、
全て自動で処理されます。(説明が変化も知れません)
なので、チェックする為にsleepをおき少し停止させ、
その間にソースの表示から出力しました。

sessionはCookieの機能を利用しているらしいので、
Cookieがダメな理由同様にNGとなってしまいました↓




お二人とも本当にありがとうございます。
思った以上に難しそうなので、もう少し仕様について確認してみます。

何か他にも方法等がございましたら、またよろしくお願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-06-28 21:57
 セッションは、Cookie を使う方法と、URL を使う方法があります。
しかし、.aspx ではないページに遷移するなら、セッションにアクセスできないので、どっちにしても使えませんけど。

 仕様のバックグラウンドは明らかにできませんか?最初から実現できないことを実現しようとしているような気がする。
 何を使って移動するか、というのを、web.config で指定するのも、変ですね。cookie を許可するかどうかは、クライアントが決めるものです。web.config で「cookie を使う」となっていても、クライアントが許可していなければ移動できません。
ここは、「cookie を使ってみる。だめなら post してみる」のような作り方でなければならないように思います。
(個人的には、イヤだ)

 あ、それと、sleep しなくても、ソースの中の値は変わっていないはずですよ。
で、それの、何がまずいのでしょうか?
ユーザ名やパスワードが丸見えだから?
それなら GET もだめでしょう。
おそらく、cookieを使う方法もだめ。
ユーザ名やパスワードを渡してはいけません。「このユーザで認証されました」という情報を渡します。(ユーザ名は含まれますが)
_________________
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-06-28 22:50
あ何をしたいのかいまいちよく分からないんですが、
最初から破綻してる仕様を実装しようとしてるように思えます。

これならOKというのを作ろうと思ったら、
相手のアプリとキーでも共有させて、暗号化とか使わないとだめだと思いますよ。

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