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

目前,我将地址簿存储为哈希表,搜索时间为 O(1),但如果建议,我可以轻松切换到其他数据结构。

有帮助吗?

解决方案

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

您可以执行以下步骤:

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

您可以在 MSDN 上阅读更多内容 这里这里。您可能还会发现有帮助的 自动完成 AJAX 扩展器.

其他提示

在为了使其上按键来完成那里将是JavaScript的(或客户端端VBScript如果您使用的IE)参与。这离不开它,如果你想根据按键的输入做到这一点来完成。

如果你是当用户离开该文本框做,那么你可以在C#在服务器端使用自动回和代码 - 我不得不说虽然,我认为这种做法是丑陋的。需要同步回发验证数据是在我看来,用户庞大的征收,因此应才真正是最后的手段或当你得到异步脚本做的工作只是权宜之计。你也可以做到这一点,在后一次(当他们试图提交表单),并对其进行验证,并给用户返回的确认消息,如果有地址的失败,但再一次,这是同步的,用户不得到的早期反馈的好处。

我此使用一个Windows服务使用JavaScript调用(使用XMLHttpRequest对象)会做(或使用RESTful服务)。您绑定文本框的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#后端进行验证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top