asp.net对无序列表批量操作的三种方法
在网页开发中,经常要用到无序列表。事实上在符合W3C标准的div+CSS布局中,无序列表被大量使用,ASP.NET虽然内置了BulletedList控件,用于创建和操作无序列表,但感觉不太好用。本篇介绍服务器端ASP.NET批量操作基于原生html标签的无序列表的三种方法。
方法一,将li元素做成html控件,加上id,用FindControl方法。
aspx代码:
[html]view plaincopy
- <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代码:
[csharp]view plaincopy
- 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代码:
[html]view plaincopy
- <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代码:
[csharp]view plaincopy
- 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代码:
[html]view plaincopy
- <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代码:
[csharp]view plaincopy
- 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;
- }
以上三种方法各有优缺点,可根据实际情况选用。