我被困了两个小时,需要帮助。我尝试了所有我能在网上找到的例子,但都不起作用。我正在用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的文本,并在单击时调用正确的函数?我还没能找到三者之间的平衡,任何帮助都将不胜感激。
发布于 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
发布于 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>
https://stackoverflow.com/questions/50766467
复制相似问题