- - PR -
ターゲット指定の値渡し
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-03 15:11
お世話様です。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9629&forum=7 にて、教えていただいたRegisterStartUpScriptメソッドについてお聞き致します。 ヘルプを見てたのですが、正直使い方がわかりません。 やりたいことは、検索機能をもつページで検索件数が複数の場合はグリッド表示、 一件の場合はそのデータのIDをJavaScriptにてtargetを指定してsubmitする方法です。 スクリプトの中身は、 function send_id(ID) { document.form1.target = "test"; document.form1.id_text.value = ID; document.form1.action = "test.aspx"; document.form1.submit(); } です。(JavaScriptを使わなくてもtarget指定で値を送信できればよいのですが。。。) ここでRegisterStartUpScriptを使う場合、
のように記述すればよろしいのでしょうか? 因みに、一つ目の引数の意味がよくわかりません。 意味不明でしたら、追記しますのでご教授お願い致します。 | ||||||||
|
投稿日時: 2004-03-03 15:33
どのような動きになるかは出力されたHTMLのソースをみてみればわかりやすいです。
一つ目の引数は登録したスクリプトを区別するための名前ですが 実際その名前で区別して何かするということは少ないと思います。 (追加) ↓この部分は間違いですね。失礼 ちなみにJavaScriptを使わない場合は↓のような感じ (いろいろ抜けていますので補完してください)
[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-03-03 15:37 ] | ||||||||
|
投稿日時: 2004-03-03 16:09
お返事ありがとうございます。
Response.Redirectというのはtargetを指定できているのでしょうか? 引き続きお願い致します。 [ メッセージ編集済み 編集者: BB.NK 編集日時 2004-03-03 16:37 ] | ||||||||
|
投稿日時: 2004-03-03 16:27
targetは、クライアントからサーバへrequestを送信する際に指定するものです。
サーバからクライアントにresponseを返すときには指定できません。 サーバでの処理結果によって、targetの値を指定することはできないと思います。 | ||||||||
|
投稿日時: 2004-03-03 16:44
Response.Redirectの件はHeさんの書き込み通りtarget指定では使えません。
ターゲット指定前提ってことを見ないで例を書いてしまって申し訳ありません。 あの例は同一ページで画面遷移させる場合のみ有効です。 ターゲット指定する場合はクライアント側の処理なのでやはりRegisterStartUpScript を使用するのが一番だと思います。
| ||||||||
|
投稿日時: 2004-03-04 08:43
スクリプトを区別するというか、スクリプトに名前を付けて、同じ名前のスクリプトの登録は1回だけにする、というか。。。 例えば、私はテキストボックスをクリックするとカレンダーを別ウインドウで表示するというWebカスタムコンポーネントを作りました。サーバサイドで、テキストボックスのonclick属性にスクリプト関数のコールをさせています。カレンダーを表示させるスクリプトは.ascxファイルに書き込んでも良いのですが、そうすると1つのページに複数のコンポーネントを置かれると、関数名がダブってしまいます。そのため、サーバサイドでRegisterClientScriptBlock(RegisterStartupScriptと、登録される場所が違うだけのメソッド)を利用して、スクリプトを登録しています。こうすることで、1ページには必ずスクリプト関数が1つしか置かれません。 Aという動作をするスクリプトと、Bという動作をするスクリプトを、同じ名前で登録しようとすると、先に登録したものが有効になります。この点は注意。
う!記憶が危うい・・・ 1.2つのスクリプトを登録して、片方しか登録されておらず、 原因を調べると同じ名前で登録していた。 2.2つのスクリプトを登録して、片方しか実行されておらず、 登録する順番を変えて両方が実行されるようにした。 という2ケースがあったのだが、混ざっている。。。 →→確認しました。先に登録したものが有効。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-03-04 12:18 ] | ||||||||
|
投稿日時: 2004-03-04 09:09
仕様変更になり、Response.Redirectでもよくなってしまったのですが(つまりtargetの指定なし)少し気になる部分があるため質問させてください。
以下のコードのようにtryの中でDB接続やグリッドへのバインド、一件の場合のResponse.Redirectを行っています。ブレイクポイントを入れて動きを見たところ、Response.Redirectでエラーかなにかが発生してCatchへ飛んでしまいます。 そこで、try-catchをコメントアウトしてみたのですが何も起こらず正常動作します。 これは問題ないのでしょうか? [code] using(OracleConnection cnn = new OracleConnection(dsn)) { try { //省略(データセットDSを作成,変数strIDに値を入力) if(DS.Tables.Count == 1) { string strURL = "TEST.aspx?ID=" + strID; Response.Redirect(strURL,true); return; } //省略(グリッドへバインド) catch { false_label.Text = "catch DBconnect"; } return; } また、target指定の方法も勉強のためやってみます。 わからなかった場合、また質問させてください。 #編集です。 上記の質問ですが、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9158&forum=7 にも書いてありました。こういったコードはあまりしないということなのでしょうか? その場合、どうやってコーディングしたらよいでしょうか? [ メッセージ編集済み 編集者: BB.NK 編集日時 2004-03-04 09:13 ] [ メッセージ編集済み 編集者: BB.NK 編集日時 2004-03-04 09:16 ] | ||||||||
|
投稿日時: 2004-03-04 09:50
エラーかなにかではなくて、投げられた例外やメッセージを書いて欲しいところですが、ThreadAbortExceptionではないですか? これはRedirectなどをすると発生します。 Redirectすることによって、もうそのページの処理は終了するから例外を発生させて処理から抜けてしまうということですかね。 catchしても正しく動いているみたいですが、もしかするとそのまま外まで投げた方がよいかも。 |