- - PR -
[ASP.NET]動的コントロールにリンクを設定したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-10-14 18:29
はじめまして。
以前よりこちらを使用させて頂いておりましたが、 今回どうしてもわからない部分がありましたのでお知恵を拝借したいと思います。 ASP.NETにてWebアプリケーションを開発中です。 ログイン後、表示されるメニューの数がユーザー区分によって変わるため コントロールの動的配置のソースを他の掲示板で見つけたものを使用しています。 While dr.Read() = True tr = New HtmlTableRow tc1 = New HtmlTableCell tc2 = New HtmlTableCell btn = New Button lbl = New Label tc1.Style("Position") = "Absolute" tc1.Style("top") = 105 + iCnt * 50 tc1.Style("left") = "350px" tc2.Style("Position") = "Absolute" tc2.Style("top") = 100 + iCnt * 50 tc2.Style("left") = "400px" tc1.Style("width") = "30px" tc2.Style("width") = "220px" btn.Style("width") = "100%" lbl.Style("width") = "100%" tc1.Controls.Add(New LiteralControl(iCnt)) tc2.Controls.Add(btn) tr.Cells.Add(tc1) tr.Cells.Add(tc2) btn.Text = dr.Item("menu_name") lbl.Text = dr.Item("user_kbn") table1.Rows.Add(tr) End While 上記がそのコードになり、drはexecutereader()で取得したSQLの結果を入れてます。 現状このコードにてメニューマスタから最適なメニューを取得できているのですが、 今度はボタン部分にリンク機能を付けたい所で詰まっています。 単純にjavascriptで tc2.Attributes.Add("onclick", "javascript:href='A.aspx'") (※実際はA.aspxの部分はdr.item("link")として同じように格納していきたいと考えてます) とすれば動的に配置されたButtonオブジェクトにリンクが貼れると思ったのですが クリックしても(現在のページの)page_loadが走るだけで、目的のA.aspxに遷移できませんでした。 動的にコントロールを配置すると同時に、そのコントロールにそれぞれリンク機能を持たせるにはどのようにすればよろしいでしょうか? よろしくお願いいたします。 | ||||
|
投稿日時: 2005-10-14 23:56
こんにちは。
読み違いをしているかも知れませんが。 とりあえず、リンクが張れればよいのであれば、 WebサーバコントロールのHyperLinkを使ってはいかがでしょうか。 ImageURLを使用してボタン風に見せることも出来ます。 LinkButtonも使用できますが、これはPostBackが走るので、 サーバ側で適切な画面に遷移させてやる必要があります。 (これは、お望みの挙動ではないでしょうね) 要望が「ボタンにリンク機能をつけたい」ということでしたら、 残念ながらその方法は、知りません。 違ったことを言っていたらご免なさい。 HyperLinkを使った場合(C#で書いてます)
では。 | ||||
|
投稿日時: 2005-10-15 03:32
こんにちは、でっちです。
とりあえず「ボタン押下でPostBackせずに画面遷移したい」が目的だと仮定して返答します。 ・1つ目 「tc2」はHtmlTableCellで宣言されていますよね。 HTMLで言えばTDタグですので、onclickのイベントは発生しません。 onclickは「btn」にAddして下さい。 ・2つ目 Javascriptが誤っています。正しくはlocation.href="...です。 ・3つめ PostBackが不要であれば、ボタンは以下のどちらかを使用した方が良いです。 System.Web.UI.HtmlControls.HtmlInputButton System.Web.UI.HtmlControls.HtmlButton ソースの通りSystem.Web.UI.WebControls.Buttonを使用する必要がある場合は、 onclickをAddする時に"Javascript:location.href='A.aspx';return false;" と最後にfalseを返さないとPostBackされてしまい、画面遷移が行われません。 | ||||
|
投稿日時: 2005-10-15 09:05
あれ?そうでしたっけ? MSDN の td 要素 の説明によると、td 要素 にも onclick イベント が定義されています。 _____________________________________________________________________________ □ Posted by Jitta on 2005/10/15 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ | ||||
|
投稿日時: 2005-10-15 11:15
こんにちは、じゃんぬ です。
W3C 仕様的にも OK のようです。 http://www.hajimeteno.ne.jp/html40/t/td.html _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-10-15 14:51
ぐは!しまった。
Jittaさん、じゃんぬさん、ご指摘ありがとうございますm(_ _)m >>AERITHさん とはいえ、TableCellにつけてもボタンクリック時にイベントが走らないことに変わりありませんので、対応内容は変わりありません。 ※一応訂正表 誤:HTMLで言えばTDタグですので、onclickのイベントは発生しません。 正:HTMLで言えばTDタグですので、onclickの属性をつけたとしてもボタン押下時にはイベントは発生しません。 | ||||
|
投稿日時: 2005-10-17 09:15
こんにちは、AERITHです。お返事遅れてすみません。
葉瀬崎浩樹さん、でっち6号さん、Jittaさん、じゃんぬねっとさん、 ご回答ならびに丁寧な解説ありがとうございます。 こちらの考えている挙動がはっきりと伝えきれていなかったようで申し訳ありません。 でっち6号さんのおっしゃるように、「ボタン押下でPostBackせずに画面遷移したい」というのが今回の主旨でした。 またオブジェクトに関してはボタンでなくても構わなかったので、こちらも記述するのを失念しておりました。 さて、ご教授頂いた >ソースの通りSystem.Web.UI.WebControls.Buttonを使用する必要がある場合は、 >onclickをAddする時に"Javascript:location.href='A.aspx';return false;" >と最後にfalseを返さないとPostBackされてしまい、画面遷移が行われません。 を指定することによって、無事画面遷移が行われました。 これから時間を見つけて >PostBackが不要であれば、ボタンは以下のどちらかを使用した方が良いです。 >System.Web.UI.HtmlControls.HtmlInputButton >System.Web.UI.HtmlControls.HtmlButton のやり方と葉瀬崎浩樹さんのHyperLinkの方も試してみようと思います。 それよりもまずはマスタから動的にリンクを設定する所ですけど^^; >>でっち6号さん >とはいえ、TableCellにつけてもボタンクリック時にイベントが走らないことに変わりありませんので、 >対応内容は変わりありません。 とありましたが、TableCellを修正せずに教えて頂いたJavascriptの部分を修正するだけで機能しました。 でっちさんのおっしゃる「イベント」と私が考えてる「リンクの挙動」というのはもしかして別物なのでしょうか…。 もしよろしければご回答願います。 皆様のお陰で無事動作いたしました。 また何かあればお願いしたいと思います。 それでは。 | ||||
|
投稿日時: 2005-10-17 10:07
恥の上塗り
申し訳ないです。。。 下位要素は上位要素のイベントも引き継ぐのですね orz 恥かきついでに色々と実験してみました。 btnに相当するコントロールは大体どんなコントロールでもクリックイベントを引き継ぐようです。(実験したもの:LinkButton,Label,ImageButton) コントロールまで動的に変えたい場合に使えそうですね。 勉強になりました。 |
1