Как изменить класс CSS элемента HTML-страницы, используя ASP.NET? - PullRequest
16 голосов
/ 23 сентября 2008

У меня есть несколько

элементов с разными идентификаторами на странице ASP.NET:
<li id="li1" class="class1">
<li id="li2" class="class1">
<li id="li3" class="class1">

и может изменить свой класс, используя JavaScript следующим образом:

li1.className="class2"

Но есть ли способ изменить класс элемента

с помощью ASP.NET? Это может быть что-то вроде:
WebControl control = (WebControl)FindControl("li1");
control.CssClass="class2";

Но FindControl () работает не так, как я ожидал. Есть предложения?

Заранее спасибо!

Ответы [ 8 ]

30 голосов
/ 29 декабря 2008

Добавить runat="server" на вашей HTML-странице

затем используйте свойство атрибута на вашей странице asp.Net, как это

li1.Attributes["Class"] = "class1";
li2.Attributes["Class"] = "class2";
12 голосов
/ 23 сентября 2008

FindControl будет работать, если вы включите runat = "server" в

<li id="li1" runat="server">stuff</li>

В противном случае ваш код на стороне сервера не сможет его увидеть.

5 голосов
/ 20 января 2010

Это найдет элемент li и установит класс CSS для него.

using System.Web.UI.HtmlControls;

HtmlGenericControl liItem = (HtmlGenericControl) ctl.FindControl("liItemID");
liItem.Attributes.Add("class", "someCssClass");

Не забудьте добавить свой атрибут runat="server", как упоминалось другими.

4 голосов
/ 23 сентября 2008

Метод FindControl выполняет поиск серверных элементов управления. То есть он ищет элементы управления с атрибутом «runat», установленным в «server», как в:

<li runat="server ... ></li>

Поскольку ваши

теги не являются серверными элементами управления, FindControl не может их найти. Вы можете добавить атрибут «runat» к этим элементам управления или использовать ClientScript.RegisterStartupScript, чтобы включить некоторый сценарий на стороне клиента для управления классом, например
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script language=\"javascript\">");
sb.Append("document.getElementById(\"li1\").className=\"newClass\";")
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "MyScript", sb.ToString());
4 голосов
/ 23 сентября 2008

вы должны установить runat = "server" как:

<li id="li1" runat="server">stuff</li>
3 голосов
/ 09 августа 2012

Пожалуйста, попробуйте это, если вы хотите применить стиль:

li1.Style.Add("background-color", "black");

Для CSS вы можете попробовать следующий синтаксис:

li1.Attributes.Add("class", "clsItem");
1 голос
/ 06 июля 2012

Leaf Dev предоставил решение для этого, но вместо «ctl» нужно вставить «Master».

У меня все равно работает:

using System.Web.UI.HtmlControls;

HtmlGenericControl liItem = (HtmlGenericControl) ctl.FindControl("liItemID");
liItem.Attributes.Add("class", "someCssClass");
0 голосов
/ 06 июня 2012

Вы также можете попробовать это тоже, если хотите добавить несколько стилей:

li1.Style.add("color","Blue");
li2.Style.add("text-decoration","line-through");
...