我有一个表格,显示arraylist大小的行。我有一个显示ID的链接按钮。但我无法在后面的代码中获取id。我尝试过使用commandArgument,但我无法获得该值。
<table style="width: 100%; border: 1px solid black;border-
collapse:collapse;">
<thead class="auto-style1">
<tr>
<th class="auto-style1">Navigate</th>
<th class="auto-style1">Description</th>
<th>Price</th>
</tr>
</thead>
<%ArrayList myList = new ArrayList();
ArrayList price = new ArrayList();
ArrayList id = new ArrayList();
myList= (ArrayList)Session["description"];
price = (ArrayList)Session["price"];
id = (ArrayList)Session["id"];
if (Session["description"]!=null)
{
for (int i = 0; i < myList.Count; i++)
{
LinkButton1.Text = Convert.ToString(id[i]);%>// Here i have set the value of the text. But in the code i am not able to fetch the id which is clicked.
<tr>
<td class="auto-style1">
<asp:LinkButton ID="LinkButton1" runat="server" onclick ="LinkButton1_Click"></asp:LinkButton></td>
<td class="auto-style1"><%=myList[i]%></td>
<td class="auto-style1"><%=price[i]%></td>
<% }
}%>
</tr>
</table>
我需要显示的id作为该特定链接按钮的链接按钮文本
答案 0 :(得分:0)
你说你设置了CommandArgument但它没有用。这通常是放弃的方式。
<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<% id[i] %>" onclick ="LinkButton1_Click"></asp:LinkButton>
我怀疑出错的是你自己应用了一个循环(我很少看到)并且每次都会渲染LinkButton1,但是这将导致多个控件具有相同的ClientID,因为没有其他的控制树,用于区分LinkButton1和其他LinkButton1。
我建议使用Repeater进行循环+绑定。如果您开始使用对象而不是多个会话变量,这会容易得多。您的方法也将受益于使用对象。使用具有属性Id,Price和Description的对象“Navigation”。
<asp:Repeater ID="someRepeater" runat="server">
<HeaderTemplate>
<table style="width: 100%; border: 1px solid black;border-collapse:collapse;">
<thead class="auto-style1">
<tr>
<th class="auto-style1">Navigate</th>
<th class="auto-style1">Description</th>
<th>Price</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="auto-style1">
<asp:LinkButton ID="LinkButton1" runat="server" onclick ="LinkButton1_Click" CommandArgument="<%# ((Navigation)Container.DataItem).Id %>" Text="<%# ((Navigation)Container.DataItem).Id %>"></asp:LinkButton></td>
<td class="auto-style1"><%# ((Navigation)Container.DataItem).Description %></td>
<td class="auto-style1"><%# ((Navigation)Container.DataItem).Price %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
在后面的代码中,您构建或从Session中获取List导航并将其绑定到转发器:
someRepeater.DataSource = navigations ?? new List<Navigation>();
someRepeater.DataBind();
现在可以区分每个LinkButton1(或任何WebControl),因为它位于不同的repeater-item中,因此行id也可以集成在ClientID中,因此也是唯一的ClientID。
使用转发器方法,您可以自己制作任何HTML功能列表。转发器就像在ASP.Net中循环一样,因此ASP.Net可以处理所有内容。