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

时间:2020-03-06 14:35:47  来源:igfitidea点击:

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

<li id="li1" class="class1">
<li id="li2" class="class1">
<li id="li3" class="class1">

并可以使用JavaScript更改其类,如下所示:

li1.className="class2"

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

WebControl control = (WebControl)FindControl("li1");
control.CssClass="class2";

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

提前致谢!

解决方案

我们必须将runat =" server"设置为:

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

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

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

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

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

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

因为<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());

添加
HTML页面中的runat =" server"

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

li1.Attributes["Class"] = "class1";
li2.Attributes["Class"] = "class2";

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

using System.Web.UI.HtmlControls;

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

记得添加其他人提到的runat =" server"属性。