从 DoubleClick、Web 应用程序而非 Windows 窗体上的 ListBox 获取选定值
Posted
技术标签:
【中文标题】从 DoubleClick、Web 应用程序而非 Windows 窗体上的 ListBox 获取选定值【英文标题】:Getting Selected Value from ListBox on DoubleClick, Web App, Not Windows Forms 【发布时间】: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 来触发方法。只需单击一下即可。
它是一个多选列表框。如果用户选择了多个项目,第一次单击将在选择其余项目之前触发。
【参考方案1】:
在您的列表框循环中,您可以将双击事件连接到每个项目。例如
item.Attributes.Add("ondblclick", "functionCall();");
【讨论】:
不确定我是否理解。 Listbox 循环必须通过双击触发才能启动代码。 ListBox 没有“双击”操作。 供参考:docs.microsoft.com/en-us/dotnet/api/… Jobesk- 你的意思是当我填充列表框时?你是说我可以添加那个属性吗? (即使 DoubleClick 没有原生操作?) 您想在列表框本身或其项目上创建双击操作?两种方式都可以,只需在运行时相应地添加属性即可。 它的项目。如何在运行时添加属性以及在代码中的什么位置添加它?以上是关于从 DoubleClick、Web 应用程序而非 Windows 窗体上的 ListBox 获取选定值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WinApi/user32.dll 或类似的东西远程执行 ListBox 的 ListBox1_DoubleClick 事件?
如何在 .NET 单选按钮中获取 DoubleClick 事件?
如何在本地 IIS 而非 Express 中调试 ASP.NET 5 Web 应用程序