在我的页面上,用户(内部员工)可以键入以逗号分隔的电子邮件地址列表。我想要做的是每次输入逗号时都会检查新写的电子邮件地址是否在地址簿中。
目前,我将地址簿存储为Hashtable,用于O(1)搜索时间,但如果推荐,我可以轻松切换到其他数据结构。
答案 0 :(得分:5)
您可以使用JavaScript和AJAX与服务器端进行通信。
您可以执行以下步骤:
您可以在MSDN here和here上阅读更多内容。 您可能还会发现AutoComplete AJAX extender有用。
答案 1 :(得分:3)
为了在按键上完成它,将会有javascript(或者如果你使用的是IE,则是客户端vbscript)。如果您希望基于键控输入进行此操作,则无法在没有它的情况下完成此操作。
如果您在用户离开该文本框时执行此操作,那么您可以使用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,它不应该是可编辑的...无论你采取什么方法,我只是警告你,只是检查一些问题他们使用输入的','方法。
答案 2 :(得分:0)
您必须使用Javascript执行此操作。输入逗号后,只有这样您才能将电子邮件传回C#后端进行验证。