问题描述
我有一个ASP.Net网站,后面带有C#代码。我试图从asp.net列表框中双击获取选定的值。我看到的所有解决方案都是针对Windows窗体的,实际上是否存在Doubleclick事件。 ListBox的System.Web.UI.WebControls版本没有这种运气。
需要双击以触发后面代码中的方法,该方法使我可以读取所选的值。
有很多相关的文章,但不适用于System.Web.UI.WebControls.ListBox。
以下是代码示例:
.aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XXX-AddressBook.aspx.cs" EnableViewState="true" Inherits="VRV_AddressBook" %>
<html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<%-- <Meta http-equiv="X-UA-Compatible" content="IE=7,chrome=1"/>--%>
<Meta http-equiv="x-ua-compatible" content="IE=edge" />
<Meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
<Meta http-equiv="Expires" content="0">
<Meta http-equiv="Cache-Control" content="no-cache">
<Meta http-equiv="Pragma" content="no-cache">
<style>
</style>
<script type="text/javascript">
</SCRIPT>
<title> Address Book</title>
</head>
<form id="frmAddressBook" runat="server">
<div>
<asp:ListBox ID="lstbxddNames" runat="server" Rows="17" SelectionMode="Multiple"></asp:ListBox>
</div>
</form>
</body>
</html>
.aspx.cs页中的建议方法,由于Web Ap版本中没有双击动作,因此无法触发:
private void lstbxddNames_DoubleClick(object sender,System.EventArgs e)
{
if (lstbxddNames.Items.Count > 0)
{
for (int i = 0; i < lstbxddNames.Items.Count; i++)
{
if (lstbxddNames.Items[i].Selected)
{
string Test = lstbxddNames.Items[i].Value.ToString();
}
}
}
}
这是我加载列表框的方式:
DataTable dt_UserRS = new DataTable();
if (Choice.toupper() == "GLOBAL")
{
lstbxddNames.DataSource = dt_UserRS;
lstbxddNames.DataTextField = "Name";
lstbxddNames.DataValueField = "Email";
lstbxddNames.DataBind();
}
这是我正在使用的解决方案。我实际上在发布之前尝试过此操作,但是我将其放置在PageLoad中的错误位置(我将其错误放置在if(!IsPostBack)部分中)。
protected void Page_Load(object sender,EventArgs e)
{
if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "lstdbclick")
{
lstbxddNames_DoubleClick(lstbxddNames.SelectedValue.ToString());
// string TEST = lstbxddNames.SelectedValue.ToString();
}
lstbxddNames.Attributes.Add("ondblclick",ClientScript.GetPostBackEventReference(lstbxddNames,"lstdbclick"));
if (!IsPostBack)
{
ViewState["ViewStateId"] = System.Guid.NewGuid().ToString(); //PART OF PAGE REFRESH DETECTION
Session["SessionId"] = ViewState["ViewStateId"].ToString();
确保也可以使用该方法:
private void lstbxddNames_DoubleClick(string Value)
{
if (!String.IsNullOrEmpty(Value))
{
string Test = Value;
}
}
有人可以解释这里发生了什么吗? 我不明白的一件事是为什么要添加属性?如果我可以通过事件参数检测到双击,为什么要添加该属性?
在此先感谢您的帮助,
埃里克
解决方法
在列表框循环中,您可以将双击事件关联到每个项目。例如
item.Attributes.Add("ondblclick","functionCall();");
,
检查下面的链接,这对我来说很完美。
我已经检查了整个代码,并实现了我的项目。
希望这对您有所帮助。
https://html.developreference.com/article/24269128/How+to+add+Double+Click+mouse+event+to+listbox%3F