Verificar e-mails quando eles são digitados
-
18-09-2019 - |
Pergunta
Na minha página de usuários (membros do pessoal interno) pode digitar uma lista separada por vírgulas de endereços de correio electrónico. O que eu gostaria de fazer é cada vez que uma vírgula é digitado ele verifica que o endereço de e-mail recém-escrita está no livro de endereços.
Atualmente tenho o livro de endereços armazenado como um Hashtable para O (1) vezes procurar, mas eu posso facilmente mudar para outra estrutura de dados se é recomendado.
Solução
Você pode fazer isso com JavaScript e AJAX para se comunicar com o lado do servidor.
Você pode fazer os seguintes passos:
- Criar um serviço web que recebe a string a partir do cliente (que é o e-mail que o usuário tenha digitado), verifica-lo e retorna verdadeiro / falso.
- Adicionar [ScriptService] atributo para o classe de serviço Web.
- Na página, adicionar um ASP.NET ScriptManager controle com Scripts / ScriptReference que aponta para o serviço web a partir do passo 1.
- Na página, adicionar código javascript que ganchos para o evento onkeydown dos e-mails caixa de texto
- Neste manipulador de eventos, se o usuário digitar uma vírgula, executar um pedido de serviço da Web para o servidor com o valor caixa de texto. Quando a responder (verdadeiro ou falso) é recebido, fazer o que você precisa com ele.
Você pode ler mais sobre MSDN aqui e < a href = "http://msdn.microsoft.com/en-us/library/bb398822.aspx" rel = "nofollow noreferrer"> aqui . Você também pode achar útil a AutoComplete AJAX extensor .
Outras dicas
Para que isso seja feito ao tocar a tecla não vai ser javascript (ou cliente VBScript lado, se você estiver usando o IE) envolvidos. Isso não pode ser feito sem que se você estiver olhando para fazê-lo com base na entrada com chave.
Se você tivesse que fazê-lo quando as folhas do usuário que a caixa de texto, então você poderia usar AutoPostback e código-lo em C # no lado do servidor - Eu tenho que dizer, porém, eu acho que essa abordagem é feio. Exigindo uma nova postagem síncrona para os dados de validação é uma enorme imposição sobre o usuário na minha opinião e, portanto, só deve realmente ser um último recurso ou um paliativo enquanto você está recebendo roteiro assíncrona para fazer o trabalho. Você também pode fazê-lo em tempo de pós (quando eles estão tentando enviar o formulário) e validá-los e dar uma mensagem de validação o usuário de volta se qualquer um dos endereços falhar, mas, mais uma vez, este é síncrono e o usuário não obter o benefício de feedback inicial.
I faria isso usando um serviço do Windows (ou usar o serviço RESTful) usando uma chamada de javascript (usando o objeto XMLHttpRequest). Bind keydown evento da sua caixa de texto para um método JavaScript.
<input type="text" onKeyDown="javascript:CheckInput(this)" />
Em seguida, configure a sua chamada javascript - esta é a coragem do que está acontecendo:
( Disclaimer: Este código é não produção pronta, é apenas um exemplo que deve dar-lhe algum sentido)
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.);
}
}
Então, o que você está fazendo aqui é a criação de um XMLHttpRequest, empurrando os dados nela e atirando-o para um serviço web.
A sua aplicação web ASP.NET vai precisar de um serviço de web embutido para isso que vai fazer a validação do endereço.
Eu também pode avisar: O que se há apenas um único endereço eo usuário não atingiu a vírgula? Você deve mover as entranhas do método CheckInput () para próprio método lo de que analisa os endereços. O método KeyDown realmente só deve verificar se a '' foi empurrado. Desta forma, você pode chamar o serviço web para verificar quando a caixa de texto perde o foco também. Também gostaria de se preocupar com a modificação de endereços existentes sem que o usuário acertar a vírgula novamente. Portanto, eu gostaria de saber sobre esta abordagem. Eu consideraria que uma vez que um endereço é validado você deve ter um javascript que só permite que endereço a ser excluído, ele não deve ser editável ... Independentemente da abordagem que você toma, eu só estou avisando que há algum problema com apenas verificando -los usando a abordagem entrou ''.
Você tem que fazer isso com Javascript. Após a vírgula é digitado, só então você pode passar a parte de trás e-mail para C # backend para verificação.