c# - 如何确定在 ASP.Net C# 中的 ListView 内单击 LinkButton 的行?
问题描述
例如,假设我有一个 ListView,其中包含一些列和一个额外的 LinkButton 列,并且 LinkButton 将存在于 ListView 的每一行中。
有什么方法可以检查是否单击了 LinkButton,以及单击了 ListView 中的哪一行?
我试图在我的 aspx.cs 页面上执行此操作,而不是在 aspx 页面上使用 DataSource 对象。
编辑:这是我的 aspx.cs 页面的代码
protected void ServicesListView_ItemCommand(object sender, ListViewCommandEventArgs e)
{
int idValue;
var backend = new ServicesBackend();
switch (e.CommandName)
{
case "View":
idValue = Convert.ToInt32(e.CommandArgument);
var info = backend.GetOneService(idValue);
DescriptionTextBox.Text = info.Description;
HoursTextBox.Text = info.JobHours.ToString();
CommentsTextBox.Text = info.Comments;
DisplayServicePanel.Visible = true;
break;
}
}
不幸的是 id 每次都返回 0
这是我的 aspx 页面的一个片段
<asp:LinkButton ID="ViewButton" CommandName="View" CommandArgument='<%# Item.ServiceId %>' runat="server" OnClick="ViewButton_Click" CssClass="btn btn-default" style="display: inline-block;">View</asp:LinkButton>
提前致谢。
解决方案
您可以使用 NamingContainer 轻松获取项目索引。
protected void LinkButton1_Click(object sender, EventArgs e)
{
//cast the sender back to a linkbutton
LinkButton lb = sender as LinkButton;
//get the current listview item from the linkbutton namingcontainer
ListViewDataItem lvdi = lb.NamingContainer as ListViewDataItem;
//get the item index from the listviewdataitem
int index = lvdi.DataItemIndex;
}
aspx
<asp:ListView ID="ListView1" runat="server">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
</ItemTemplate>
</asp:ListView>
推荐阅读
- reactjs - 道具已更新,componentDidUpdate 未触发
- c# - 使用字典包含具有不同属性的键比较器
- javascript - 检测数据集中异常的方法
- c# - Creating a customBaseController for an ASP.Net MVC site?
- git - 具体的git配置
- r - R 错误:阴影图形设备错误
- iis-8 - 错误:- AWS 上的 HTTP 错误 408
- html - 显示文件名并允许用户在提交表单之前删除文件
- java - Crudrepository 如何找到最后日期之间的?
- javascript - 为什么 express 的 res.download() 方法会导致“请求中止”错误?