6

ListView を使用した ASP.NET アプリケーションがあります。ListView のすべての行に、新しい Web フォーム「Benutzer.aspx」を開く LinkBut​​ton があります。私の問題は、この行のインデックスを取得できないことです。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");

            }
        }

...

何か問題でもありますか :(

タラソフ

4

5 に答える 5

9

これを試して:

まず、ボタンのインデックスが必要です。したがって、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");           
}

私が助けてくれることを願っています

于 2012-07-23T11:53:24.083 に答える
1

私は 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

問題の解決に役立つかどうか教えてください。

于 2015-06-09T05:44:14.810 に答える
1

これは HTMLOnItemCommandです。

<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(); 
}
于 2019-07-03T19:09:01.287 に答える
1

別のサーバー コントロールの子コントロール コレクションに含まれているため、コントロールが見つかりません:

<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");
于 2012-07-23T11:11:34.220 に答える