在我的页面上,用户(内部员工)可以键入以逗号分隔的电子邮件地址列表。我想做的是每次输入逗号时都会检查新写入的电子邮件地址是否在地址簿中。
目前,我将地址簿存储为 O(1) 搜索时间的哈希表,但如果推荐,我可以轻松切换到另一个数据结构。
在我的页面上,用户(内部员工)可以键入以逗号分隔的电子邮件地址列表。我想做的是每次输入逗号时都会检查新写入的电子邮件地址是否在地址簿中。
目前,我将地址簿存储为 O(1) 搜索时间的哈希表,但如果推荐,我可以轻松切换到另一个数据结构。
您可以使用 JavaScript 和 AJAX 与服务器端进行通信。
您可以执行以下步骤:
您可以在此处和此处阅读 MSDN 上的更多信息。您可能还会发现AutoComplete AJAX 扩展器很有帮助。
为了在按键上完成它,将涉及到 javascript(或客户端 vbscript,如果您使用的是 IE)。如果您希望基于键输入来执行此操作,那么没有它就无法完成。
如果您要在用户离开该文本框时执行此操作,那么您可以使用 AutoPostback 并在服务器端用 C# 对其进行编码 - 我不得不说,我认为这种方法很丑陋。在我看来,需要同步回发来验证数据对用户来说是一个巨大的负担,因此在你使用异步脚本来完成工作时,它应该只是最后的手段或权宜之计。您也可以在发布时间(当他们尝试提交表单时)执行此操作并验证它们并在任何地址失败时向用户返回验证消息,但再一次,这是同步的,用户不会获得早期反馈的好处。
我将使用 Windows 服务(或使用 RESTful 服务)使用 javascript 调用(使用 XmlHttpRequest 对象)来执行此操作。将文本框的 keydown 事件绑定到 JavaScript 方法。
<input type="text" onKeyDown="javascript:CheckInput(this)" />
然后设置您的 javascript 调用 - 这是正在发生的事情的核心:
(免责声明:此代码尚未准备好生产,它只是一个示例,应该为您提供一些指导)
var req;
function CheckInput()
{
if (window.event) keycode = window.event.keyCode;
if (keycode == 188) //KeyCode 188 = Comma;
{
//I haven't provided code for this, you will need to code
//the extraction of the address you wish to test for yourself...
var addressToCheck = ParseLastAddressFromTextBox();
req = new XMLHttpRequest();
//Replace <SERVICEADDRESS> with the URL of your web service
//the 'true' parameter specifies that the call should be asynchronous
req.open("POST", "<SERVICEADDRESS>", true);
req.onreadystatechange = MatchSearchComplete; //This is the callback method
//Set up the post headers
req.setRequestHeader("Host", "localhost");
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var params = addressToCheck;
req.setRequestHeader("Content-Length", params.length);
//Iitiate the call to the service
req.send(params); }
}
//The XMLHttpRequest object will fire this method when the
//onreadystatechange event fires...
function MatchSearchComplete()
{
//Check that the response has the correct state and status
//indicating that we've received a response from the server.
if (req.readyState == 4 && req.status == 200)
{
//Our call to the service is complete
var result = req.responseText;
if (result == "false")
alert('The address "'+ req.params +'" is not valid.);
}
}
因此,您在这里所做的是设置 XMLHttpRequest,将数据推送到其中并将其发送到 Web 服务。
您的 ASP.NET Web 应用程序将需要一个内置的 Web 服务来验证地址。
我也可能会警告:如果只有一个地址并且用户没有点击逗号怎么办?您应该将 CheckInput() 方法的内容移到它自己的解析地址的方法中。KeyDown 方法实际上应该只检查“,”是否被按下。这样您就可以调用 Web 服务来检查文本框何时失去焦点。我还会担心在用户再次点击逗号的情况下修改现有地址。因此,我想知道这种方法。我认为,一旦地址被验证,你应该有一个只允许删除该地址的 javascript,它不应该是可编辑的......无论你采取什么方法,我只是警告你,只是检查有一些问题他们使用输入的“,”方法。
您必须使用 Javascript 来执行此操作。输入逗号后,您才可以将电子邮件传回 C# 后端进行验证。