- PR -

動的生成したlinkbuttonのIDとタグのクラスIDについて

1
投稿者投稿内容
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-11-21 20:34
こんにちは。
ASP.NET(VB.NET)でWebアプリケーションの開発を行っております。

リンクボタンが入っているリストタグを、リストタグごと動的に生成したいのですが、
そこで壁にぶつかっております。

<asp:Repeater ID="Repeater1" Runat="server">
<ItemTemplate>
<li class='<%# DataBinder.Eval(Container.DataItem,"className") %>'>

 <asp:linkbutton id="ここを指定したい" runat="server">
 <%# DataBinder.Eval(Container.DataItem,"text") %>
 </asp:linkbutton>

</li>
</ItemTemplate>
</asp:Repeater>

ぶつかっている問題点
@Page.Request.Params.Get("__EVENTTARGET")で押されたボタンを取得し、そのボタンの
テキストを太字に変える条件分岐をIsPostbackに記述したいが、押されたボタンを判別するidを事前に用意する方法がわかりません。ボタン生成時に自動にふられるid以外に、自分でidを指定できる方法はありますでしょうか。

A上の@と同様に、ボタンが押された際に、そのボタンのリンクタグ内にあるスタイルシートのクラスidを変えたいのですが、押されたボタンから、そのボタンをくくっているリストタグのclassidを取る良い方法が浮かびません。
現在は、classidもご覧頂いている様に一意のidをふっていますが、ボタンのidとの連携(どのボタンを押したら、どのリストタグというようなつながり)をどのように取るべきか悩んでおります。

どなたか良い方法を教えていただけませんでしょうか。
ご教示の程宜しくお願い致します。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-11-22 11:04
Repeater.ItemCommand イベント

LinkButton.CommandName プロパティ

を使うのがよいでしょう。
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-11-22 21:07
todoさん、こんにちは。
todoさんのおっしゃっていた通り、asp:linkbuttonを以下のようにすることでどのリンクボタンが押されたか識別することが出来ました。

<ul id="hoge">
<asp:Repeater ID="Repeater1" OnItemCommand="tabRep_ItemCommand" Runat="server">
<ItemTemplate>

<li id='<%# DataBinder.Eval(Container.DataItem,"selectValue") %>'>
<asp:linkbutton id="lbn" runat="server" CommandName="selectTab" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"selectValue") %>'>
<%# DataBinder.Eval(Container.DataItem,"text") %>
</asp:linkbutton>
</li>

</ItemTemplate>
</asp:Repeater>
</ul>

また、Aに関しましては、liタグにe.CommandArgumentと同じidをもたせ、
以下の関数を
tabRep_ItemCommand(ByVal Sender As Object, ByVal e As RepeaterCommandEventArgs)内で呼ぶことで解決いたしました。

Sub SetSelectTab(ByVal id As String)
Dim script As String = _
"<script language='JavaScript'>" _
+ "var ulTag = document.getElementById('hoge');" _
+ "for (var i = 0; i < ulTag.childNodes.length; ++i) {" _
+ "var liTag = ulTag.childNodes.item(i);" _
+ "if (liTag.id == '" + id + "') {" _
+ "liTag.className = 'selected';" _
+ "} else {" _
+ "liTag.className = '';" _
+ "}" _
+ "} <" + "/script>"

RegisterStartupScript("setTab", script)


ここでもうひとつお聞きしたいことがあります。
Repeaterによって作成したlinkbuttonですが、
これらは実行時に<A>タグとなってコード上表示されます。
ここでこの中から指定する<A>タグに対して、スタイルを設定することはできるのでしょうか。
現在、押されたリンクボタンに対してそのフォントをBOLDにしたいのですが、
どうしていいものか悩んでいます。
どなたかお分かりになる方いらっしゃいましたらよろしくお願い致します。
リズ
会議室デビュー日: 2005/04/21
投稿数: 18
投稿日時: 2005-11-22 22:16
自己レスです。
以下の様にスタイルシートに記述することで解決いたしました。お騒がせして申し訳ありませんでした。お恥ずかしい限りです…。
todoさん、ありがとうございました。

#hoge li {

}

#hoge li.selected {

}

#hoge li.selected * {
…ここで<A>タグのスタイルを指定することが出来ました。
}


1

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