首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按钮循环ASP.NET

按钮循环ASP.NET
EN

Stack Overflow用户
提问于 2018-06-09 02:25:38
回答 2查看 725关注 0票数 0

我被困了两个小时,需要帮助。我尝试了所有我能在网上找到的例子,但都不起作用。我正在用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的文本,并在单击时调用正确的函数?我还没能找到三者之间的平衡,任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-09 02:54:03

如果您想创建服务器端控件,最好使用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文件中有一个返回Person列表的方法:

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>

参考:https://msdn.microsoft.com/en-us/library/x8f2zez5(v=vs.100).aspx

票数 2
EN

Stack Overflow用户

发布于 2018-06-09 02:51:29

像这样的东西?

    <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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档