【发布时间】:2020-12-16 15:46:29
【问题描述】:
我有一个带有 C# 代码的 ASP.Net 网站。我试图从 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页面的Proposed Method,由于Web App版本没有双击动作,无法触发:
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();
}
}
}
}
这是我加载 ListBox 的方式:
DataTable dt_UserRS = new DataTable();
然后我从 SQL 查询中加载数据表的内容(代码未显示)
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;
}
}
这里发生了什么?
我不明白的一件事是为什么要添加属性?如果我可以检测到带有事件参数的双击,为什么要添加属性?
【问题讨论】:
-
双击什么?听起来是
javascript的好候选人 -
双击列表框中的项目。我不擅长 Javascript,因此使用 C# 解决方案。如果您可以为我制作 Javascript 解决方案白痴证明,我将欢迎您的帮助!
-
向我提供列表框的
html标记,我可以做到。 -
"需要双击来触发后面代码中的方法..." 您不需要需要 dbl-clk 来触发方法。只需单击一下即可。
-
它是一个多选列表框。如果用户选择了多个项目,第一次单击将在选择其余项目之前触发。
标签: c# asp.net web-applications listbox double-click