18 Stimmen

C# - Wie man die Attribute von HTML-Elementen ändert

Meine Master-Seite enthält eine Liste wie hier gezeigt. Was ich jedoch tun möchte, ist das Attribut "class=active" zu der Liste li hinzuzufügen, die gerade aktiv ist, aber ich habe keine Ahnung, wie das geht. Ich weiß, dass der Code im page_load Ereignis der aspx-Seite steht, aber keine Ahnung, wie ich auf die li zugreifen kann, zu der ich das Attribut hinzufügen muss. Bitte erleuchte mich. Vielen Dank.

    Screenshots
    Future
    News
    Download
    Home

28voto

Ben Scheirman Punkte 39742

Um auf diese Steuerelemente serverseitig zuzugreifen, müssen Sie sie auf "server" festlegen

  Screenshots
  Future
  News
  Download
  Home

im Code-Behind:

foreach(Control ctrl in nav.controls)
{
   if(!ctrl is HtmlAnchor)
   {
      string url = ((HtmlAnchor)ctrl).Href;
      if(url == GetCurrentPage())  // <-- Sie müssten das schreiben
         ctrl.Parent.Attributes.Add("class", "active");
   }
}

4voto

Rob Punkte 44368

Der folgende Code kann verwendet werden, um eine benannte Steuerelement irgendwo in der Steuerelement-Hierarchie zu finden:

public static Control FindControlRecursive(Control rootControl, string id)
{
    if (rootControl != null)
    {
        if (rootControl.ID == id)
        {
            return rootControl;
        }

        for (int i = 0; i < rootControl.Controls.Count; i++)
        {
            Control child;

            if ((child = FindControlRecursive(rootControl.Controls[i], id)) != null)
            {
                return child;
            }
        }
    }

    return null;
}

Also könnten Sie etwas ähnliches tun:

Control foundControl= FindControlRecursive(Page.Master, "theIdOfTheControlYouWantToFind");
((HtmlControl)foundControl).Attributes.Add("class", "active");

Vergessen zu erwähnen, dass Sie tatsächlich runat="server" auf jedem Steuerelement benötigen, das Sie auf diese Weise finden möchten =)

2voto

Bevan Punkte 281

Fügen Sie runat="server" zu den li-Tags in der Masterpage hinzu und fügen Sie dann dies dem entsprechenden page_load-Ereignis hinzu, um die Klasse 'active' dem li in der Masterpage hinzuzufügen

HtmlGenericControl li = (HtmlGenericControl)Page.Master.FindControl("screenshots"); li.Attributes.Add("class", "active");

1voto

csgero Punkte 2753

Alle Teile wurden bereits in vorherigen Antworten bereitgestellt, aber um alles zusammenzusetzen, müssen Sie folgendes tun:

  • Das Attribut runat="server" zu den und* Elementen hinzufügen

    • Eine öffentliche Methode hinzufügen, die auf der Masterseite die Arbeit erledigt und von den Seiten mit der Masterseite aufgerufen werden kann
    • Die Methode im Page_Load der Seiten aufrufen

      Alternativ können Sie den Code auch der OnLoad(...) Methode der Masterseite hinzufügen, damit Sie den Methodenaufruf nicht auf jeder Seite im Page_Load hinzufügen müssen.

1voto

Lou Franco Punkte 85315

Sie könnten ein Client-Skript wie folgt registrieren:

(setzen Sie die ID auf die ID des li-Elements, das Sie auf aktiv setzen möchten)

ClientScript.RegisterStartupScript(this.GetType(), "setActiveLI", "document.getElementById(\""+id+"\").setAttribute(\"class\", \"active\");", true);

Dies erzeugt einen JavaScript-Aufruf auf der Seite in der Nähe des unteren Endes, nachdem die Elemente bereits gerendert wurden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X