按钮循环ASP.NET

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

我最近两个小时都被困住了,需要帮助。我已经尝试过我能在网上找到的每一个例子,但没有一个可以工作。我正在构建一个网页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>

如果我删除Response.Write(),它只循环一次,但它生成的一个按钮实际上工作,并在点击调用方法。此外,变量i不适用。

<ul>
  <form id="tagloop" runat="server">
    <% foreach (string i in data)%>
      <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>
用户回答回答于

如果要创建服务器端控件,最好使用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();
}

您必须编写更多代码,但是您要避免在标记中添加太多逻辑,并且不必使用Response.Write,这很容易出错和拼写错误。

您甚至可以使用强类型对象执行此操作!我们假设您有一个Person类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

你的.cs文件中有一个方法可以返回一个人员列表:

IEnumerable<Person> Persons()
{
    for (int i = 0; i < 10; i++)
    {
        yield return new Person { FirstName = $"Foo{i}", LastName = $"Bar{i}" };
    }
}

然后,您可以在转发器控件中引用对象属性:

<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>

扫码关注云+社区

领取腾讯云代金券