如何使用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"
属性。