如何使用ASP.NET更改HTML页面元素的CSS类?

Ale*_*yev 16 css asp.net dynamic-css

我在ASP.NET页面上有几个具有不同id的<li>元素:

<li id="li1" class="class1">
<li id="li2" class="class1">
<li id="li3" class="class1">
Run Code Online (Sandbox Code Playgroud)

并可以使用这样的JavaScript更改他们的类:

li1.className="class2"
Run Code Online (Sandbox Code Playgroud)

但有没有办法使用ASP.NET更改<li>元素类?它可能是这样的:

WebControl control = (WebControl)FindControl("li1");
control.CssClass="class2";
Run Code Online (Sandbox Code Playgroud)

但FindControl()不能像我预期的那样工作.有什么建议?

提前致谢!

小智 30

添加 runat="server"HTML页面

然后像这样在asp.Net页面中使用attribute属性

li1.Attributes["Class"] = "class1";
li2.Attributes["Class"] = "class2";
Run Code Online (Sandbox Code Playgroud)


nas*_*ski 12

如果在<li>中包含runat ="server",FindControl将起作用

<li id="li1" runat="server">stuff</li>
Run Code Online (Sandbox Code Playgroud)

否则,服务器端代码无法"看到"它.

  • 不要忘记,当您将runat ="server"添加到LI元素时,您需要修改JavaScript以使用服务器控件的ClientID属性查找元素 (3认同)

小智 5

FindControl 方法搜索服务器控件。也就是说,它查找属性“runat”设置为“server”的控件,如下所示:

<li runat="server ... ></li>
Run Code Online (Sandbox Code Playgroud)

由于您的 <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());
Run Code Online (Sandbox Code Playgroud)


cwe*_*ton 5

这将找到li元素并在其上设置CSS类.

using System.Web.UI.HtmlControls;

HtmlGenericControl liItem = (HtmlGenericControl) ctl.FindControl("liItemID");
liItem.Attributes.Add("class", "someCssClass");
Run Code Online (Sandbox Code Playgroud)

请记住添加runat="server"其他人提到的属性.