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.

Foi útil?

Solução

Você pode fazer isso com JavaScript e AJAX para se comunicar com o lado do servidor.

Você pode fazer os seguintes passos:

  1. 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.
  2. Adicionar [ScriptService] atributo para o classe de serviço Web.
  3. Na página, adicionar um ASP.NET ScriptManager controle com Scripts / ScriptReference que aponta para o serviço web a partir do passo 1.
  4. Na página, adicionar código javascript que ganchos para o evento onkeydown dos e-mails caixa de texto
  5. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top