将值传递给linkBut​​ton onclick背后的代码

时间:2015-06-13 01:33:37

标签: c# html asp.net

我有一个表格,显示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作为该特定链接按钮的链接按钮文本

1 个答案:

答案 0 :(得分:0)

你说你设置了CommandArgument但它没有用。这通常是放弃的方式。

 <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<% id[i] %>" onclick ="LinkButton1_Click"></asp:LinkButton>

我怀疑出错的是你自己应用了一个循环(我很少看到)并且每次都会渲染LinkBut​​ton1,但是这将导致多个控件具有相同的ClientID,因为没有其他的控制树,用于区分LinkBut​​ton1和其他LinkBut​​ton1。

我建议使用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();

现在可以区分每个LinkBut​​ton1(或任何WebControl),因为它位于不同的repeater-item中,因此行id也可以集成在ClientID中,因此也是唯一的ClientID。

使用转发器方法,您可以自己制作任何HTML功能列表。转发器就像在ASP.Net中循环一样,因此ASP.Net可以处理所有内容。