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与服务器端通信 您可以执行以下步骤:
您可能还发现了一些有用的方法。您必须使用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.);
}
}