[英]How I use the ItemCommand Event for my ListView in my ASP.NET Application
我有一個帶有ListView的ASP.NET應用程序。 在ListView的每一行中,我都有一個LinkButton,它打開一個新的webform“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">
您需要嘗試遞歸地找到控件:
看一看
或者您可以使用此擴展方法:
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屬性中刪除'CommandArgument',bcoz ..已經有你正在尋找的dataindex。通過指定一個命令參數,你將覆蓋默認值。所以只需刪除命令參數,你的代碼將正常工作...... :)
我是VB程序員檢查這個方法可能會給你一些想法
在使用datasource綁定列表之后,在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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.