そのため、リンクを表示するユーザーコントロールがあり、現在アクティブなリンクの色を変更したいと思います。これは、usercontrolascxファイルのListView内のコードです。
<asp:ListView ID="sidebarListView" runat="server" DataKeyNames="Id" DataSourceID="SqlDataSourceSidebar" OnItemCommand="sidebarListView_ItemCommand">
<ItemTemplate>
<div id="sidebarItemID" class="sidebarItem" runat="server">
<div>
<asp:LinkButton ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' CommandName="Select" CommandArgument='<%# Eval("Id") %>' />
</div>
</div>
</ItemTemplate>
....
リンクボタンがクリックされたときにsidebarItemIDクラスを変更する必要があります。背後にある私のdefault.aspxコードは次のようになります。
private void SideBar1_ItemCommand ( object sender , EventArgs e ) {
Int32 facId = Sidebar1.FacultyId;
SqlDataSource1.SelectCommand = "SELECT [Id], [Name], [Faculty_Id], [User_Id], [Author], [Picture], [Location] FROM [Books] WHERE [Faculty_Id]=" + facId + " ORDER BY [DateAdded] DESC";
HtmlGenericControl htmlDivControl = (HtmlGenericControl) FindControlRecursive( Sidebar1 , "sidebarItemID" );
htmlDivControl.Attributes.Add("class", "sidebarItemActive");
string newClass = htmlDivControl.Attributes["class"];
//Response.Write( String.Format( "<script>alert('{0}');</script>" , newClass ) );
}
これにより、ユーザーコントロールでクリックされたリンクのIDに基づいてsqlDataSourceが正しく変更されます。ただし、クラスは変更されません。
Response.Write(...)セクションのコメントを解除すると、「sidebarItemActive」というアラートが正しく表示されるため、ページからコントロールが正しく検出され、そのクラス属性が「sidebarItemActive」として割り当てられますが、表示してもページ上で何も変更されません。ブラウザのページソースには、クラスはまだ「sidebarItem」であると表示されます。変更が有効にならないということで、ここで何が起こっているのでしょうか。