ASP.NET批量操作基于原生html标签的无序列表的三种方法
在网页开发中,经常要用到无序列表。事实上在符合W3C标准的div+css布局中,无序列表被大量使用,ASP.NET虽然内置了BulletedList控件,用于创建和操作无序列表,但感觉不太好用。本篇介绍服务器端ASP.NET批量操作基于原生html标签的无序列表的三种方法。
方法一,将li元素做成html控件,加上id,用FindControl方法。
aspx代码:
<formid="form1"runat="server"> <ul> <liid="li1"runat="server">初始值1</li> <liid="li2"runat="server">初始值2</li> <liid="li3"runat="server">初始值3</li> <liid="li4"runat="server">初始值4</li> <liid="li5"runat="server">初始值5</li> <liid="li6"runat="server">初始值6</li> <liid="li7"runat="server">初始值7</li> <liid="li8"runat="server">初始值8</li> </ul> <asp:ButtonID="Button1"runat="server"Text="Button"onclick="Button1_Click"/> </form>
aspx.cs代码:
protectedvoidButton1_Click(objectsender,EventArgse) { //单击按钮后批量改变li元素的内联文本值及样式 for(inti=1;i<=8;i++) { HtmlGenericControlli=this.FindControl("li"+i)asHtmlGenericControl; li.InnerHtml="新值"+i.ToString(); li.Attributes.CssStyle.Value="color:red"; } }
方法二,将ul、li元素做成html控件,用ul控件的Controls集合遍历。
aspx代码:
<formid="form1"runat="server"> <ulid="ul1"runat="server"> <lirunat="server">初始值1</li> <lirunat="server">初始值2</li> <lirunat="server">初始值3</li> <lirunat="server">初始值4</li> <lirunat="server">初始值5</li> <lirunat="server">初始值6</li> <lirunat="server">初始值7</li> <lirunat="server">初始值8</li> </ul> <asp:ButtonID="Button1"runat="server"Text="Button"OnClick="Button1_Click"/> </form>
aspx.cs代码:
privateintcounter=1; protectedvoidButton1_Click(objectsender,EventArgse) { //单击按钮后批量改变li元素的内联文本值及样式 foreach(Controlcontrolinul1.Controls) { if(controlisHtmlGenericControl) { HtmlGenericControlli=controlasHtmlGenericControl; li.InnerHtml="新值"+(counter++).ToString(); li.Attributes.CssStyle.Value="color:red"; } } }
方法三,利用HtmlAgilityPack,对元素以Dom方式操作。
aspx代码:
<formid="form1"runat="server"> <ulid="ul1"runat="server"> <li>初始值1</li> <li>初始值2</li> <li>初始值3</li> <li>初始值4</li> <li>初始值5</li> <li>初始值6</li> <li>初始值7</li> <li>初始值8</li> </ul> <asp:ButtonID="Button1"runat="server"Text="Button"OnClick="Button1_Click"/> <asp:ButtonID="Button2"runat="server"Text="测试空回发"/> </form>
aspx.cs代码:
protectedvoidButton1_Click(objectsender,EventArgse) { //单击按钮后批量改变li元素的内联文本值及样式 HtmlDocumenthtmlDoc=newHtmlDocument(); htmlDoc.LoadHtml(ul1.InnerHtml); HtmlNodeCollectionlis=htmlDoc.DocumentNode.SelectNodes("li"); for(inti=0;i<lis.Count;i++) { lis[i].InnerHtml="新值"+(i+1).ToString(); lis[i].Attributes.Add("style","color:red"); } ul1.InnerHtml=htmlDoc.DocumentNode.InnerHtml; }
以上三种方法各有优缺点,可根据实际情况选用。