如何在ASP.NET应用程序中为ListView使用ItemCommand事件



我有一个带有ListView的ASP.NET应用程序。在我的ListView中的每一行中,我都有一个链接按钮,可以打开一个新的网页表单"Benutzer.aspx"。我的问题是我没有得到这一行的索引。我使用ItemCommand事件,但它不起作用:(

这是我的代码:

ASPX:

...
        <ItemTemplate>
            <tr runat="server"> 
                <td align="left" ><asp:Label ID="Label1" Text='<%# Eval("Benutzer") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label2" Text='<%# Eval("eMail") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label3" Text='<%# Eval("Vorname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label4" Text='<%# Eval("Nachname") %>' runat="server" /></td>
                <td align="left"><asp:Label ID="Label5" Text='<%# Eval("Telefon") %>' runat="server" /></td>
             <td align="left"><asp:LinkButton runat="server" Text="Anzeigen" CommandName="Anzeigen" OnCommand="ListView1_ItemCommand" CommandArgument="myArguments"></asp:LinkButton></td>
            </tr>
        </ItemTemplate>
...

cs文件:

...
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "Anzeigen")
            {
                Label lbText = (Label)e.Item.FindControl("Label2");
               string email = lbText.Text;
               Session["email"] = email;
               Response.Redirect("Benutzer.aspx");
            }
        }
...

怎么回事:(

塔拉索夫

试试这个:

首先你需要有按钮的索引。因此,在html代码中,将此添加到按钮的CommandArgument中以获得索引:

CommandArgument='<%# Container.DataItemIndex %>'

然后在码尾:

if (e.CommandName == "Anzeigen")
{
      Label lbText = ListView1.Item[e.CommandArgument].FindControl("Label2");
      string email = lbText.Text;           
           Session["email"] = email;           
           Response.Redirect("Benutzer.aspx");           
}

希望我能帮助

您找不到控件,因为它包含在另一个服务器控件的子控件集合中:

<tr runat="server">

你需要尝试递归地找到控件:

看看

在ASP.NET 中查找控件的更好方法

或者你可以使用这个扩展方法:

public static class ControlExtensions
{
    public static Control FindControlRecursively(this Control control, string targetControlID)
    {
        if (control == null)
        {
            return null;
        }
        var ctrl = control.FindControl(targetControlID);
        if (ctrl == null)
        {
            foreach (Control child in control.Controls)
            {
                ctrl = FindControlRecursively(child, targetControlID);
                if (ctrl != null)
                {
                    break;
                }
            }
        }
        return ctrl;
    }
}

用法:

var ctrl = e.Item.FindControlRecursively("your control ID");

您提供的代码非常好。。。"只需从您的listview属性bcoz..中删除'CommandArgument'。它已经具有您要查找的数据索引。通过指定命令参数,您将覆盖默认参数。"。因此,只要删除命令参数,您的代码就会正常工作…:)

我是一名VB程序员检查这个方法可能会给你一些想法

将列表与数据源绑定后,在itemCommand中执行此

Dim <sometext> As Label = TryCast(e.Item.FindControl("Anzeigen"), Label)
    If e.CommandName = "Anzeigen" Then
     'do what ever you like 
     'also you can use <sometext> if you want to extract data from list
     'simply use <sometext>.<whatproperty>, you can also store it in sessions like the email you are using.
         Session("email") = email         
       Response.Redirect("Benutzer.aspx");  
    End If

如果它能帮你解决问题,请告诉我。

这是HTML,然后构建OnItemCommand

<asp:ListView ID="lvFiles" runat="server"  DataKeyNames="FileName" OnItemCommand="lvFiles_ItemCommand">
  <ItemTemplate>
    <tr runat="server">
      <td style="width:80px">
        <asp:LinkButton runat="server" 
                        ID="SelectEmployeeButton" 
                        Text="Download File"   
                        CommandName='<%#Eval("FileName")%>'
                        CommandArgument='<%#Eval("FileName")%>' />
      </td> 
    </tr>
  </ItemTemplate>
</asp:ListView>

这是背后的代码。。。

protected void lvFiles_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    string v = e.CommandArgument.ToString(); 
}

相关内容

  • 没有找到相关文章

最新更新