Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在键入电子邮件时对其进行验证_C#_Asp.net_Verification - Fatal编程技术网

C# 在键入电子邮件时对其进行验证

C# 在键入电子邮件时对其进行验证,c#,asp.net,verification,C#,Asp.net,Verification,在我的页面上,用户(内部员工)可以键入以逗号分隔的电子邮件地址列表。我想做的是,每次键入逗号时,它都会检查新写入的电子邮件地址是否在通讯簿中 目前,我将地址簿存储为哈希表,用于O(1)次搜索,但如果推荐,我可以轻松切换到另一个数据结构。您可以使用JavaScript和AJAX与服务器端通信 您可以执行以下步骤: 创建一个web服务,从客户端(用户键入的电子邮件)获取字符串,检查并返回true/false 将[ScriptService]属性添加到 web服务类 在页面上,添加一个ASP.NET

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


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

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

您可以执行以下步骤:

  • 创建一个web服务,从客户端(用户键入的电子邮件)获取字符串,检查并返回true/false
  • 将[ScriptService]属性添加到 web服务类
  • 在页面上,添加一个ASP.NET ScriptManager控件与 从步骤1指向web服务的脚本/脚本引用
  • 在页面上,添加与电子邮件文本框的onkeydown事件挂钩的javascript代码
  • 在此事件处理程序中,如果用户键入逗号,则使用textbox值向服务器执行web服务请求。当收到回复(正确或错误)时,对其执行任何需要的操作
  • 您可以阅读更多关于MSDN和。
    您可能还发现了一些有用的方法。

    您必须使用Javascript来实现这一点。键入逗号后,您才可以将电子邮件传回C#backend进行验证。

    为了在按键上完成,将涉及javascript(或客户端vbscript,如果您使用IE)。如果您希望基于键控输入来执行此操作,那么如果没有它,则无法执行此操作

    如果要在用户离开该文本框时执行此操作,则可以在服务器端使用AutoPostback并用C#编写代码-不过我不得不说,我认为这种方法很难看。在我看来,需要同步回发来验证数据对用户来说是一个巨大的负担,因此,在使用异步脚本来完成工作时,应该只是最后的手段或权宜之计。您也可以在发布时(当他们试图提交表单时)进行验证,并在任何地址失败时向用户返回验证消息,但这是同步的,用户无法从早期反馈中获益

    我可以使用Windows服务(或使用RESTful服务)和javascript调用(使用XmlHttpRequest对象)来实现这一点。将文本框的keydown事件绑定到JavaScript方法

    <input type="text" onKeyDown="javascript:CheckInput(this)" />
    
    
    
    然后设置javascript调用-这是发生的事情的核心:

    免责声明:这段代码还没有准备好生产,它只是一个示例,应该给您一些指导)

    var-req;
    函数CheckInput()
    {
    如果(window.event)keycode=window.event.keycode;
    if(keycode==188)//keycode 188=逗号;
    {
    //我还没有为此提供代码,您需要编写代码
    //您希望自己测试的地址提取。。。
    var addressToCheck=ParseLastAddressFromTextBox();
    req=新的XMLHttpRequest();
    //替换为web服务的URL
    //“true”参数指定调用应该是异步的
    请求打开(“POST”和“真”);
    req.onreadystatechange=MatchSearchComplete;//这是回调方法
    //设置帖子标题
    请求setRequestHeader(“主机”、“本地主机”);
    请求setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
    var params=addressToCheck;
    请求setRequestHeader(“内容长度”,参数长度);
    //把电话打给服务部
    请求发送(参数);}
    }
    //XMLHttpRequest对象将在
    //onreadystatechange事件激发。。。
    函数MatchSearchComplete()
    {
    //检查响应的状态和状态是否正确
    //表示我们已收到来自服务器的响应。
    如果(req.readyState==4&&req.status==200)
    {
    //我们的呼叫服务已经完成
    var结果=请求响应文本;
    如果(结果=“假”)
    警报('地址'+req.params+'无效。);
    }
    }
    
    因此,您在这里要做的是设置一个XMLHttpRequest,将数据推入其中并将其发送到web服务

    您的ASP.NET web应用程序需要一个内置的web服务来验证地址


    我可能还会警告:如果只有一个地址,而用户没有按逗号怎么办?您应该将CheckInput()方法的核心转移到它自己的解析地址的方法。KeyDown方法实际上应该只检查是否按下了“”。这样,当文本框也失去焦点时,您可以调用web服务进行检查。我还担心在用户不再次点击逗号的情况下修改现有地址。因此,我想知道这种做法。我会认为,一旦一个地址被验证,你应该有一个JavaScript,只允许删除该地址,它不应该是可编辑的…无论您采取什么方法,我只是警告您,仅使用输入的“,”方法检查它们都会有问题。

    您是使用Javascript还是C#进行验证?最好在用户单击提交按钮或焦点离开文本框时进行验证。C#最好,因为我知道这一点。Adamantium,我同意,除非这不是我的要求:(如果按一下按钮,我可以很快运行一些东西。但是为了收听按键事件,你必须使用javascript。那么我想它必须是javascript。最好使用onKeyPress事件,因为这将允许你区分
    
    
    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.);
        }
    }