Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET填充html列表控件_C#_.net_Html_Vb.net - Fatal编程技术网

C# 使用.NET填充html列表控件

C# 使用.NET填充html列表控件,c#,.net,html,vb.net,C#,.net,Html,Vb.net,我有一个这样定义的列表: <ul id="myList" class='myClass'> <li class="myItemClass">Item 1</li> <li class="myItemClass">Item 2</li> </ul> 第1项 第2项 使用.NET如何将项目动态添加到列表中?我还需要在每个新项上指定类名解决此问题的最简单方法是使用asp repeater控件 <ul

我有一个这样定义的列表:

<ul id="myList" class='myClass'>
    <li class="myItemClass">Item 1</li>
    <li class="myItemClass">Item 2</li>
</ul>
    第1项 第2项

使用.NET如何将项目动态添加到列表中?我还需要在每个新项上指定类名

解决此问题的最简单方法是使用asp repeater控件

<ul id="myList" class='myClass'>
<asp:Repeater ID="repeaterMyList" Runat="server">
<ItemTemplate>
  <li class="myItemClass">
   <%# Eval("Item") %>
  </li>
</ItemTemplate>
</asp:Repeater>
</ul>

我假设您有充分的理由不使用BulletedList Web服务器控件。无论如何,这是一个有趣的编程练习,演示了Htmlservercontrol体系结构的内部结构以及它们如何映射到简单的HTML标记

HTML
ul
li
标记不直接映射为HTMLServer控件。这意味着,即使将
runat=“server”
属性添加到列表中,其内容也不能作为列表项直接访问

但是,所有未直接映射为Html服务器控件的控件都可以通过
HtmlGenericControl
类访问。这使得动态创建和修改此类控件成为可能

因此,解决方案有两个方面:

  • 创建无序列表
    runat=“server”
    ,以便您可以在服务器端代码中访问它。另外,您应该使列表中的现有项
    runat=“server”
    ,否则它们只能作为包含前两个列表项的纯文本的
    LiteralControl
    来访问
  • 在代码中,访问列表的内容并向其中添加类型为“li”的新HtmlGenericControl
以下(简单的)页面演示了此过程:



私有共享addedItems作为列表(HtmlGenericControl)
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
如果不是Page.IsPostBack,则
'在第一次加载时,实例化列表。
addedItems=新列表(HtmlGenericControl)
如果结束
端接头
受保护的子btn1_单击(ByVal sender作为对象,ByVal e作为System.EventArgs)
'将先前创建的项目添加到UL列表中。
这一步是必要的,因为
“…以前添加的项目在回发时丢失。
对于i,整数=0到addedItems.Count-1
myList.Controls.Add(addedItems.Item(i))
下一个
'获取列表中现有项数
Dim count As Integer=myList.Controls.count
'根据文本框中的输入创建新列表项。
将li设置为HtmlGenericControl=CreateBarketItem()
'在BulletedList的末尾添加新的列表项。
myList.Controls.AddAt(count,li)
'还将此新创建的列表项添加到常规列表中。
增编.加(李)
端接头
私有函数CreateBulletItem()作为HtmlGenericControl
Dim li作为新的HtmlGenericControl(“li”)
li.InnerText=txtNewItem.Value
li.Attributes(“类”)=“myItemClass”
返回李
端函数
测试页
    第1项 第2项

您可以使用asp:BulletedList,如

<asp:BulletedList ID="MyList1" CssClass="MyClass" runat="server">
  <asp:ListItem Text="Item1" class="MyClass" />
</asp:BulletedList>
或者,如果出于某些特定原因,您需要使用ul标签,则可以向其添加runat=“server”。例如

<ul id="MyList2" class="MyClass" runat="server">
  <li class="MyClass">Item1</li>
</ul>

您甚至可以使用该HTML,添加runat=“server”无论它是什么控件,您都可以将其视为HTMLControl,我经常使用div

<ul id="myList" runat="server" class="myClass">
    <li class="myItemClass">Item 1</li>
    <li class="myItemClass">Item 2</li>
</ul>
    第1项 第2项
然后你得到HTMLControl并使用它

HtmlGenericControl li;

for (int x = 3; x <= 10; x++)
{
    li = new HtmlGenericControl("li");
    li.Attributes.Add("class", "myItemClass");
    li.InnerText = "Item " + x;

    myList.Controls.Add(li);
}
htmlgenericcontrolli;

对于(int x=3;x使用asp:BulletedList不是一个选项?因为我是.net新手,我可以问一下为什么要创建AddItems=new List(属于HtmlGenericControl)页面加载?我看不到此列表“绑定”到任何控件,是吗?为什么要将此列表中的项添加到ul?如果这是一个新问题,很抱歉。@dasha:因为动态创建的listitems不会持久保存在内存或视图状态中。我需要将新创建的listitems存储在某个位置,以便将它们添加回ul。此外,我还需要使“addedItems”变量共享,以便在回发时能够访问它。我已在代码中添加了解释性注释。希望这有帮助。:-)我正在尝试使用此技术。但在用户控件的代码隐藏中使用“mylist.something”时,会出现空引用异常。能找个人帮忙吗。
<ul id="MyList2" class="MyClass" runat="server">
  <li class="MyClass">Item1</li>
</ul>
HtmlGenericControl li = new HtmlGenericControl("li");
li.Attributes.Add("class", "MyClass");
li.InnerText = "Item2";
MyList2.Controls.Add(li);
<ul id="myList" runat="server" class="myClass">
    <li class="myItemClass">Item 1</li>
    <li class="myItemClass">Item 2</li>
</ul>
HtmlGenericControl li;

for (int x = 3; x <= 10; x++)
{
    li = new HtmlGenericControl("li");
    li.Attributes.Add("class", "myItemClass");
    li.InnerText = "Item " + x;

    myList.Controls.Add(li);
}
    <ul id="myList" runat="server" class="myClass">
        <li class="myItemClass">Item 1</li>
        <li class="myItemClass">Item 2</li>
        <li class="myItemClass">Item 3</li>
        <li class="myItemClass">Item 4</li>
        <li class="myItemClass">Item 5</li>
        <li class="myItemClass">Item 6</li>
        <li class="myItemClass">Item 7</li>
        <li class="myItemClass">Item 8</li>
        <li class="myItemClass">Item 9</li>
        <li class="myItemClass">Item 10</li>            
    </ul>
<asp:BulletedList runat="server" ...