Ändern der Benutzer-Steuerelement-css-Klasse im code-behind

Also ich habe ein user-control zeigt, dass die links und ich möchte die Farbe ändern, der link, der gerade aktiv ist.
Dies ist der code in meinem ListView meiner ascx Benutzersteuerelement-Datei.

<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>
....

Ich ändern müssen die sidebarItemID Klasse, wenn der linkbutton klicken.
Mein Standard.aspx-code wie folgt aussieht:

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 ) );
}

Richtig verpasst dem sqlDataSource-basierend auf der ID des angeklickten link in der Benutzer-Steuerelement. Aber die Klasse nicht ändern.

Wenn ich kommentieren Sie die Antwort.Schreiben(...) Abschnitt es richtig gibt eine Warnung, die sagt "sidebarItemActive" so ist es richtig findet die Kontrolle von meiner Seite aus und ordnet dessen class-Attribut als "sidebarItemActive" aber es ändert sich nichts auf der Seite wenn ich den Quelltext der Seite im browser es sagt, die Klasse ist immer noch "sidebarItem".
Was ist hier Los, dass die änderung nicht in Kraft treten?

  • Vielleicht ist das Attribut bereits vorhanden ist und indem es nicht wirksam, wie Sie es wünschen? Versuchen htmlDivControl.Attributes["class"] = "sidebarItemActive"; EDIT: Das eigentlich wahrscheinlich nicht funktionieren. Überprüfen, dass die ID des div auf der Seite ist eigentlich sidebarItemID, weil Steuerelemente Anhängen können, deren Kontrolle dem Namen der id.
  • Ich habe es versucht, dasselbe. Außerdem, soweit ich weiß, Fügen Sie Taten das gleiche wie Gesagt, so ersetzt er den Wert, wenn es bereits gesetzt ist.
  • Hmm. Auf der Seite, die ID ist in der Tat nicht "SidebarItemID", sondern "sidebar_Sidebar1_sidebarListView_sidebaritemid_0" etc. Aber Wie funktioniert die findcontrol-Methode tatsächlich finden Sie das element dann? Auch wenn ich die Benutzer-Steuerelemente ClientIDMode als statisches es immer noch nicht funktionieren, aber alle die Elemente in der ListView haben die gleiche ID, aber die Klasse immer noch nicht ändern
  • Ich denke, das hat zu tun mit der Lebenszyklus der Seite. Postbacks behandelt werden, bevor Sie gerendert werden, und da bist du mit einer Vorlage für die div, die eigentlichen sidebar-divs erstellt wird, nachdem der code verarbeitet wird. Versuchen Sie tun dies auf Rendern des Steuerelements . Wenn dies funktioniert-wie ich hoffe-sollte es, ich werde senden Sie als Antwort
  • Hmm, ich bin mir nicht sicher, dass ich verstehe. Im Grunde, ich kann es nicht auf das Rendern der Kontrolle, weil, wenn das Steuerelement gerendert wird, brauche ich nicht, die Klasse zu ändern. Ich brauche es geändert, wenn der Benutzer klickt auf einen link in der Kontrolle. Habe ich Sie richtig verstanden? Und danke für die Hilfe
  • Im wesentlichen, was die life-cycle-Mitgliedstaaten ist, dass, wenn Sie mit dem click-Ereignis der Seite feuert alle Ereignisse, einschließlich Laden, dann postback-Ereignisse wie klicken Sie auf Veranstaltungen, dann ruft render auf alle Bedienelemente. Siehe msdn.microsoft.com/en-us/library/ms178472.aspx. Also im Grunde was ich sage ist, dass die render-wahrscheinlich macht was auch immer du getan hast in der ItemCommand. Sie können vielleicht einige state-variable oder etwas von diesem ilk haben die render passieren, richtig, oder können Sie versuchen, mit AJAX und Javascript zu machen, was Sie wollen passieren.
  • lassen Sie uns weiter, diese Diskussion im chat

InformationsquelleAutor JoonasL | 2012-06-28
Schreibe einen Kommentar