【问题标题】:Get ID of item in ASP.NET Listview on button click单击按钮时获取 ASP.NET Listview 中的项目 ID
【发布时间】:2013-03-11 04:23:44
【问题描述】:

我在列表视图的每一行都有一个按钮。
我有一个关于点击事件的方法,我想在其中获取数据项的 ID。
我在列表视图中放置了一个hidden field 来存储 ID。
不过,

ListView1.FindControl("hiddenField") is returning null. 

我尝试了几种不同的事件参数,但只有空白事件参数与此按钮一起使用,所以我在事件参数中没有任何内容。
我尝试将按钮的命令设置为调用 commandEventArgs,但无论我使用什么事件参数,除了“eventArgs”,我都会得到:

“btnManage_Click”没有重载匹配委托“System.EventHandler”

如何将事件参数放入此按钮?

编辑

按钮在 ListView 的 ItemTemplate 部分中

<asp:ListView ID="ListView1" runat="server" DataSourceID="LinqDataSource1" EnableModelValidation="True" DataKeyNames="Id" InsertItemPosition="LastItem" >

 <LayoutTemplate>
              <table id="Table2" class="table" runat="server">
                <tr id="Tr1" runat="server">
                  <td id="Td1" runat="server">
                    <table runat="server" id="itemPlaceholderContainer" style="background-color: #FFFFFF; border-collapse: collapse; border-color: #999999; border-style: none; border-width: 1px; font-family: Verdana, Arial, Helvetica, sans-serif;" border="1">
                      <tr id="Tr2" runat="server" style="background-color: #DCDCDC; color: #000000;">
                        <th id="Th1" runat="server"></th>
                        <th id="Th2" runat="server">Name</th>
                        <th id="Th3" runat="server">Manage</th>
                      </tr>
                      <tr runat="server" id="itemPlaceholder"></tr>
                    </table>
                  </td>
                </tr>
                <tr id="Tr3" runat="server">
                  <td id="Td2" runat="server" style="text-align: center; background-color: #CCCCCC; font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000;"></td>
                </tr>
              </table>
            </LayoutTemplate>

【问题讨论】:

    标签: c# asp.net listview


    【解决方案1】:

    你可以这样使用

     <asp:Button runat="server" CommandArgument='<%# DisplayIndex %>'/>
    

    查看 API

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listviewcommandeventargs.aspx

    如果你有一个按钮,那么简单

     protected void templateButton_OnClick(object sender, EventArgs e)
     {
         Button myButton = (Button)sender;
     }
    

    更多详情

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemcommand.aspx

    编辑 1

    假设你有一个属性“id”,那么你可以像这样使用

      CommandArgument='<%#Eval("id")' 
    

    编辑 2

    因为它区分大小写并且你有

     DataKeyNames="Id"
    

    所以你应该如下使用

    CommandArgument='<%#Eval("Id")' 
    

    并像下面这样使用它

     int i = Convert.ToInt32(myButton.CommandArgument.ToString());
    

    【讨论】:

    • 看起来不错,但我明白了: // 当前上下文中不存在名称“DisplayIndex”。 // 我在 .NET 3.5 上
    • @hyperGeoMetric 您可以改用您的财产。
    • 噢噢噢噢。我认为这会起作用,但它不喜欢这样:“int i = Convert.ToInt32(myButton.CommandArgument);”。它说:“输入字符串的格式不正确。”我的按钮有:“CommandArgument=''
    • @hyperGeoMetric 你能把你的列表视图的 html 放上去吗
    • 按钮在ItemTemplate中跨度>
    【解决方案2】:
    You can try this: 
    
    ListView lv = (ListView)sender 
    

    这里sender是buttonclick事件的参数。然后尝试获取信息。

    【讨论】:

    • 按钮是发件人,我尝试将发件人投射到列表视图时出错
    • 好的。你有Listbox的id吗?
    【解决方案3】:

    我使用以下代码行通过 LinkBut​​ton 发送使用列表视图显示的项目的 ID:

    <asp:LinkButton ID="LinkButton1" 
                    runat="server" 
                    Text="Quick View" 
                    Font-Size="Small" 
                    OnCommand="QuickView" 
                    CommandArgument='<%# Eval("Hoarding_Id") %>' >   
    </asp:LinkButton>
    

    而且它工作正常......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      相关资源
      最近更新 更多