0

在我的页面上,用户(内部员工)可以键入以逗号分隔的电子邮件地址列表。我想做的是每次输入逗号时都会检查新写入的电子邮件地址是否在地址簿中。

目前,我将地址簿存储为 O(1) 搜索时间的哈希表,但如果推荐,我可以轻松切换到另一个数据结构。

4

3 回答 3

5

您可以使用 JavaScript 和 AJAX 与服务器端进行通信。

您可以执行以下步骤:

  1. 创建一个从客户端获取字符串(即用户输入的电子邮件)的 Web 服务,对其进行检查并返回真/假。
  2. 将 [ScriptService] 属性添加到 Web 服务类。
  3. 在页面上,添加一个带有 Scripts/ScriptReference 的 ASP.NET ScriptManager 控件,该控件指向步骤 1 中的 Web 服务。
  4. 在页面上,添加与电子邮件文本框的 onkeydown 事件挂钩的 javascript 代码
  5. 在此事件处理程序中,如果用户键入逗号,则使用文本框值向服务器执行 Web 服务请求。收到响应(真或假)后,请根据需要做任何事情。

您可以在此处此处阅读 MSDN 上的更多信息。您可能还会发现AutoComplete AJAX 扩展器很有帮助。

于 2009-12-10T14:10:57.480 回答
3

为了在按键上完成它,将涉及到 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,它不应该是可编辑的......无论你采取什么方法,我只是警告你,只是检查有一些问题他们使用输入的“,”方法。

于 2009-12-10T14:35:04.717 回答
0

您必须使用 Javascript 来执行此操作。输入逗号后,您才可以将电子邮件传回 C# 后端进行验证。

于 2009-12-10T14:12:06.920 回答