C# ASP.NET中的按钮循环

C# ASP.NET中的按钮循环,c#,html,asp.net,C#,Html,Asp.net,我被困了两个小时,需要帮助。我在网上找到的每一个例子都试过了,但都不管用。我正在ASP.NET中构建一个网页,并希望创建一个按钮列表。看起来不太难吧?但这给我带来了麻烦 这是我的代码: <ul> <form id="tagloop" runat="server"> <% foreach (string i in data)%> <%Response.Write("<li><button runat=\"serve

我被困了两个小时,需要帮助。我在网上找到的每一个例子都试过了,但都不管用。我正在
ASP.NET
中构建一个网页,并希望创建一个按钮列表。看起来不太难吧?但这给我带来了麻烦

这是我的代码:

<ul>
  <form id="tagloop" runat="server">
    <% foreach (string i in data)%>
      <%Response.Write("<li><button runat=\"server\" type=\"submit\" onserverclick=\"ClickTag\">" + i + "</button></li>");%>
  </form>
</ul>
我是否可以让它循环,在数据中包含I的文本,并在单击时调用正确的函数?我还没有找到三者的平衡点,任何帮助都将不胜感激。

像这样的事情

    <form id="tagloop" runat="server">
        <%
            List<int> data = new List<int>();
            data.Add(1);
            data.Add(2); %>
        <% foreach (int i in data)%>
           <%Response.Write("<li><button runat=\"server\" 
           type=\"submit\"onclick=\"ClickTag\">" + i + "</button></li>");%>
    </form>

像这样的东西

    <form id="tagloop" runat="server">
        <%
            List<int> data = new List<int>();
            data.Add(1);
            data.Add(2); %>
        <% foreach (int i in data)%>
           <%Response.Write("<li><button runat=\"server\" 
           type=\"submit\"onclick=\"ClickTag\">" + i + "</button></li>");%>
    </form>

如果要创建服务器端控件,最好使用
asp:Repeater

<asp:Repeater runat="server" ID="Repeater1" OnItemCommand="Repeater1_ItemCommand">
    <ItemTemplate>
        <li>
            <asp:Button runat="server"  ID="RepeaterButton" Text="<%# Container.DataItem %>" OnClick="RepeaterButton_Click"/>
        </li>
    </ItemTemplate>
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{    
    if(IsPostBack) return;
    var data = new List<string> { "Test1", "Test2", "Test3", "Test4" };
    Repeater1.DataSource = data;

    Repeater1.DataBind();
}
在.cs文件中有一个方法返回人员列表:

IEnumerable<Person> Persons()
{
    for (int i = 0; i < 10; i++)
    {
        yield return new Person { FirstName = $"Foo{i}", LastName = $"Bar{i}" };
    }
}
IEnumerable Persons()
{
对于(int i=0;i<10;i++)
{
返回新的Person{FirstName=$“Foo{i}”,LastName=$“Bar{i}”;
}
}
然后,可以在repeater控件中引用对象属性:

<asp:Repeater runat="server" ID="Repeater1" ItemType="WebFormsSandbox.Person">
    <ItemTemplate>
        <li>
            <asp:Button runat="server"  ID="RepeaterButton" Text="<%#: Item.FirstName %>  <%#: Item.LastName %>" OnClick="RepeaterButton_Click"/>

        </li>
    </ItemTemplate>
</asp:Repeater>

如果要创建服务器端控件,最好使用
asp:Repeater

<asp:Repeater runat="server" ID="Repeater1" OnItemCommand="Repeater1_ItemCommand">
    <ItemTemplate>
        <li>
            <asp:Button runat="server"  ID="RepeaterButton" Text="<%# Container.DataItem %>" OnClick="RepeaterButton_Click"/>
        </li>
    </ItemTemplate>
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{    
    if(IsPostBack) return;
    var data = new List<string> { "Test1", "Test2", "Test3", "Test4" };
    Repeater1.DataSource = data;

    Repeater1.DataBind();
}
在.cs文件中有一个方法返回人员列表:

IEnumerable<Person> Persons()
{
    for (int i = 0; i < 10; i++)
    {
        yield return new Person { FirstName = $"Foo{i}", LastName = $"Bar{i}" };
    }
}
IEnumerable Persons()
{
对于(int i=0;i<10;i++)
{
返回新的Person{FirstName=$“Foo{i}”,LastName=$“Bar{i}”;
}
}
然后,可以在repeater控件中引用对象属性:

<asp:Repeater runat="server" ID="Repeater1" ItemType="WebFormsSandbox.Person">
    <ItemTemplate>
        <li>
            <asp:Button runat="server"  ID="RepeaterButton" Text="<%#: Item.FirstName %>  <%#: Item.LastName %>" OnClick="RepeaterButton_Click"/>

        </li>
    </ItemTemplate>
</asp:Repeater>

首先在
  • 周围添加{},我认为如果没有它,这甚至不起作用。您永远不应该真正使用响应。编写响应时,它肯定不会像您注意到的那样与服务器端控件一起工作。您首选的解决方案是什么。是否希望服务器端控件具有代码隐藏事件处理程序?它可能会循环一次,因为数据中只有一个对象?首先在
  • 周围添加{},我认为如果没有它,这甚至不起作用。您永远不应该真正使用响应。编写响应时,它肯定不会像您注意到的那样与服务器端控件一起工作。您首选的解决方案是什么。是否希望服务器端控件具有代码隐藏事件处理程序?它可能会循环一次,因为数据中只有一个对象?我收到一个无效的回发或回调错误。我试着把很多事情都改成没什么不同。有什么想法吗?请参阅页面加载方法的更新代码。您需要添加回发检查。我收到无效的回发或回调错误。我试着把很多事情都改成没什么不同。有什么想法吗?请参阅页面加载方法的更新代码。您需要添加回发检查