c# - 按钮循环 ASP.NET
问题描述
在过去的两个小时里,我一直被困住,需要帮助。我已经尝试了我可以在网上找到的每一个示例,但它们都不起作用。我正在构建一个网页,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 的文本,并在点击时调用正确的函数?我还没有找到这三者的平衡点,我们将不胜感激。
解决方案
如果要创建服务器端控件,最好使用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>
参考:https ://msdn.microsoft.com/en-us/library/x8f2zez5(v=vs.100).aspx
推荐阅读
- vue.js - 在 Vuex 中使用 Framework7 $f7.router.navigate
- javascript - ngAfterCiewChecked clientHeight 不能使用换行符 - Angular 2 应用程序
- java - 垂直图像作为水平图像加载
- reactjs - 无法通过从外部 API 获取数据来更新状态
- python - 切片图像,进行一些处理并将切片组合成单个图像
- curl - 如何使用 Cygwin 将现有的 Curl 版本替换为更新的版本?
- reactjs - 未访问 React Navigation
- sql - 记录/文本不在 SQL 'IN' 子句中
- apache-spark - 用于执行列更新的 Spark 映射函数
- python - 如何加入索引和索引并使其进入新列表 - python