- PR -

Formタグの指定が書き換えられる

1
投稿者投稿内容
ひろきち
会議室デビュー日: 2002/09/13
投稿数: 18
投稿日時: 2002-09-28 15:26
どなたかわかる方がいらっしゃいましたらご教授ください。
よろしくお願いします。

Formタグ内にrunat=server と付け加えるとAction指定が書き換えられてしまって、
うまく画面が表示できません。

読み込みのページをフレームで作成し、下記のように設定しています。

[a.aspxファイル]
<FRAMESET rows="120,*" frameBorder="1">
 <FRAME src="b.aspx" scrolling="no" name="frmT00">
 <FRAME src="c.aspx" name="frmF00">
</FRAMESET>

[b.aspxファイル]
<form id="frmT01" action="c.aspx" target="frmF00" method="post" runat=server>

 その他のタグ

</form>

何をしているかと言うと、
b.aspx内にラジオボタンを4つ用意して、それをクリックされた時に、
選ばれた物の値をセッション変数に格納して、c.aspxを呼びなおそうしています。

b.aspxのformタグのrunat=serverを書いていなかったときは、
HTMLコントロールのラジオボタンをして、クリック時にJavaScriptのsubmit()を呼び
c.aspxをうまく表示できていたんですが、これではsubmit時にb.aspxのPage_Loadが
発生しないため、セッション変数に値を入れる事ができませんでした。
(submit時にイベントをとる方法がわからなかったんで・・・)

で、WEBコントロールのラジオボタンを使用して、AutoPostBackプロパティを有効にし
Page_Loadイベントを使用してセッション変数に値を入れる事が実現できました。
ただ、この方法で行うと何故かフレーム下画面に上画面と同じ物が表示されてしまいます。
ブラウザからソースを見ても、
<form id="frmT01" action="c.aspx" target="frmF00" method="post" runat=server>
こうなっているはずなのに、
<form id="frmT01" action="b.aspx" target="frmF00" method="post" runat=server>
このように、Action指定が書き換えられてしまって、表示されます。

もちろん元のソースの書き間違えということはありません。
なぜ書き換えられてしまうのかがわからず困っています。

わかりにくい説明で申し訳ありませんが、
どなたかご存知の方がいらっしゃいましたら、
教えていただけませんでしょうか、
よろしくお願いいたします。
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-09-28 19:34
runat=serverが何をしようとしているのかもうちょっと冷静に
考えてみてはいかがでしょう。
なぜクライアント側のイベントをサーバ側で実行できるのか、
疑問に思ったことはありませんか?
Actionが書き換えられるのはrunat=serverなら当然のように思えます。

ASP.NETをいじっていないので具体的なコードを示すことは出来なくて
申し訳ないですが、
やりたいことが「Session変数への値のセット」であるなら
runat=serverでなくても出来たりしませんか?
Page_Loadでしかセットできない値ですか?

なんとなく元の状態で工夫したほうが楽に思えるのですけれど・・・
ひろきち
会議室デビュー日: 2002/09/13
投稿数: 18
投稿日時: 2002-09-28 21:27
まりりさん、書き込みありがとうございます。

まりりさんの言われている事は、もっともな意見と思いました。
書き込みをした後も、色々と調べていたのですが、
だんだん、考え方自体がおかしいように思えていたところでした。

ご意見を頂けて、感謝しております。

今回、実現したかった事に関しては、
FormタグのActionを指定せず、Targerのみを指定しておいて、
上画面の中で、Response.Redirect("下画面URL")してしまう事で、
Targetで指定されている下画面のフレームへ流し込むという
方法で対応させてもらいました。
(あまりうまいやり方では無いとおもいますが・・・)

お手数をおかけして申し訳ありませんでした。
もっと理解を深めれるように頑張っていこうと思います。
本当に、ご意見ありがとうございました。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-09-29 01:44
こんにちは。うりゅうです。

>FormタグのActionを指定せず、Targerのみを指定しておいて、
>上画面の中で、Response.Redirect("下画面URL")してしまう事で、
>Targetで指定されている下画面のフレームへ流し込むという
>方法で対応させてもらいました。
>(あまりうまいやり方では無いとおもいますが・・・)

それがASP.NET的には一番うまいやり方だと思います。強いて言えば、Response.RedirectよりもServer.Transferを使う方がいいかなという程度です。

Formがrunat=Serverの場合にはPostBackのメカニズム以上、自分自身に戻すしかないのだと思われます。また、コードビハインドの考え方で言えば、ASPXのHTML定義であるFormタグの中に直接的な遷移情報が入るのは望ましくないのではないかとも思われます。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
ひろきち
会議室デビュー日: 2002/09/13
投稿数: 18
投稿日時: 2002-09-29 10:33
おはようございます。ひろきちです。

うりゅうさん、ご意見ありがとうございます。
皆さんのご意見はとても勉強になります。

WEBシステムを作成していく中で、もっと色々な方法を試しながら、
よりよい作り方を勉強していきたいですね。

これからも、色々と質問などさせて頂くと思いますので、
よろしくお願いいたします。

1

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