- PR -

[ASP.NET]複数画面への遷移

投稿者投稿内容
NA(-_-)MI
常連さん
会議室デビュー日: 2003/10/30
投稿数: 32
投稿日時: 2006-08-10 15:19
<form action="xxxx" method="post" target="_parent">
<input type="hidden" name="para1" id="para1" runat="server">
</form>

という記述をしていますが、
サーバ側処理でパラメータに値を入れることはできてるみたいです。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2006-08-10 18:40
サーバーサイドでパラメータに値を入れているということは、ポストバックを行ってますよね?

引用:

-------------------------------------------------------
<form action="xxxxx" method="post" target="_parent">
<input type="hidden" id="para1" runat="server">
<input type="hidden" id="para2" runat="server">
</form>

<form action="xxxxx" method="post" target="_parent">
<input type="hidden" id="para1" runat="server">
<input type="hidden" id="para3" runat="server">
</form>
-------------------------------------------------------



もしかしてボタンAとボタンBって、↑に書かれてる2つのフォームとは更に別のフォームに配置していますか?
そうすると↑に書かれている2つのフォームって実質無意味ではないですか?

コード:
<form id="form1" runat="server">
    <button id="button1" runat="server" onserverclick="button1_Click">
    <button id="button2" runat="server" onserverclick="button2_Click">
    <input type="hidden" id="para1" runat="server">
    <input type="hidden" id="para2" runat="server">
    <input type="hidden" id="para3" runat="server">
</form>


というふうにして、サーバー側で遷移先に応じた値をパラメータに入れるのではダメですか?例えばbutton1のクリックイベントハンドラでは、para1とpara2を設定して画面Aに飛ばす、button2のクリックイベントハンドラでは、para1とpara3を設定して画面Bに飛ばすという感じで。

#なんか物凄い勘違いしてるかも・・・そしたらすみません、スルーしてください^^;
NA(-_-)MI
常連さん
会議室デビュー日: 2003/10/30
投稿数: 32
投稿日時: 2006-08-10 19:00
ASP時代は、飛び先分<FORM>を作っておいて、ボタンクリック時にそれをサブミットする
という手法を良く使いました。

ページロード時にパラメータに値を入れているので、
ポストバックの必要はありませんでした。

ボタンクリック時にポストバックではなく、
そのまま別フォームへ飛ばそうとしていたのが、スタンダードな記述ではないようですね。



教えていただいたソースも参考にさせていただきます。
色々と試してみたいと思います。どうもありがとうございました!!
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-08-10 19:09
引用:
ボタンクリック時にポストバックではなく、
そのまま別フォームへ飛ばそうとしていたのが、スタンダードな記述ではないようですね。

一応、runnat=server のFormの内側でも、onclickで(javascriptで)actionを変えて
submit(Katzeさんのコードに書いてあるようなこと)をすればポストバックせずに別ページへpostできますけどね。
その場合<asp:Button である必要はないですが。

[追記]
ぁ、「スタンダードな記述では」か。はいスタンダードではないですね。

[ メッセージ編集済み 編集者: べる 編集日時 2006-08-11 00:33 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-08-10 23:16
 ASP.NET 単独なら、セッションに格納して Redirect なり、Transfer が常套手段でしょうね。

 runat=server を付けるのは、サーバ側で自動的にコントロールを識別するためです。ですから、手動で識別するなら、付ける必要はありません。とりあえず、リファレンス link to msdn を読みましょう。

こんな感じで行けると思う。
コード:
<form>
    <input type=hidden id=para1>
    <pnput type=hidden id=para2>
...

コード:
Page_Load() {
	object para1 = this.Request.Form["para1"];
	object para2 = this.Request.Form["para2"];
...



 ポストバックの必要がないというより、ポストバックの仕組みがない、ですよね。
 ASP.NET 1.x で他のページにポストできないのは、ViewState の復元が出来ないからです。ViewState を OFF にしてしまえば、復元するものがないので通ってしまうような気がしますが、そうするとほぼすべてのサーバ コントロールが意味を無くすぞ、と。

 仕組みを知っていれば、どうすればいいかと考えられる幅も広がるんですよね。なので、面倒くさがらずに、ベースの勉強をすることを勧めます。

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