Domanda

Sulla mia pagina di un utente (personale interno) possono digitare un elenco separato da virgole di indirizzi di posta elettronica. Quello che vorrei fare è ogni volta una virgola viene digitato controlla che l'indirizzo di posta elettronica appena scritto è nella rubrica.

Attualmente ho la rubrica memorizzata come Hashtable per O (1) i tempi di ricerca, ma posso facilmente passare ad un'altra struttura di dati se si raccomanda.

È stato utile?

Soluzione

Si può fare con JavaScript e AJAX per comunicare con il lato server.

Si può fare i passi successivi:

  1. Crea un servizio web che ottiene la stringa dal client (che è l'e-mail che l'utente ha digitato), controlla e restituisce vero / falso.
  2. Aggiungi attributo [ScriptService] per la classe di servizio web.
  3. Nella pagina, aggiungere un ASP.NET controllo ScriptManager con Script / ScriptReference che punta al servizio Web dal punto 1.
  4. Nella pagina, aggiungere codice javascript che si aggancia alla manifestazione onKeyDown delle email di testo
  5. In questo gestore di eventi, se l'utente digita una virgola, eseguire una richiesta di servizio web al server con il valore casella di testo. Quando viene ricevuto il rispondono (vero o falso), fare tutto ciò che è necessario con esso.

Si può leggere di più su MSDN qui e < a href = "http://msdn.microsoft.com/en-us/library/bb398822.aspx" rel = "nofollow noreferrer"> qui . Si potrebbe anche trovare utile il completamento automatico AJAX extender .

Altri suggerimenti

Al fine di farlo per essere fatto su pressione dei tasti non sta per essere javascript (o VBScript lato client se si sta utilizzando IE) coinvolti. Questo non può essere fatto senza di essa, se stai cercando di farlo in base all'input digitato.

Se si dovesse farlo quando l'utente lascia quella casella di testo, allora si potrebbe utilizzare AutoPostBack e il codice in C # sul lato server - Devo dire, però, penso che l'approccio è brutto. La richiesta di un postback sincrono per convalidare i dati è un enorme imposizione sull'utente a mio parere e, pertanto, deve solo essere davvero l'ultima risorsa o un ripiego, mentre si sta ricevendo lo script asincrono per fare il lavoro. Si potrebbe anche farlo in tempo di post (quando si sta cercando di inviare il modulo) e validare e dare all'utente indietro un messaggio di convalida se uno qualsiasi degli indirizzi falliscono, ma ancora una volta, questa è sincrona e l'utente non ottenere il beneficio di un feedback precoce.

I potrebbe fare questo usando un servizio di Windows (o utilizzare il servizio RESTful) utilizzando una chiamata javascript (utilizzando l'oggetto XMLHttpRequest). Associare evento KeyDown della vostra casella di testo a un metodo JavaScript.

<input type="text" onKeyDown="javascript:CheckInput(this)" />

Quindi impostare la chiamata javascript - questo è il coraggio di quello che sta succedendo:

( Avviso: Questo codice è non pronti per la produzione, è semplicemente un esempio che dovrebbe dare qualche direzione)

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.);
    }
}

Quindi quello che stai facendo qui è la creazione di un XMLHttpRequest, spingendo i dati in esso e sparare via a un servizio Web.

L'applicazione Web ASP.NET avrà bisogno di un servizio web integrato ad esso che saranno facendo la validazione dell'indirizzo.

Potrei anche mettere in guardia: se c'è solo un singolo indirizzo e l'utente non ha colpito la virgola? Si dovrebbe spostare il coraggio del metodo CheckInput () fuori di essa la propria metodo che analizza gli indirizzi. Il metodo KeyDown in realtà dovrebbe verificare solo se la '' è stato spinto. In questo modo è possibile chiamare il servizio web per controllare quando la casella di testo perde lo stato attivo anche. Vorrei anche preoccuparsi di modifica degli indirizzi esistenti senza che l'utente colpire di nuovo la virgola. Pertanto, mi chiedo su questo approccio. Vorrei prendere in considerazione che una volta che un indirizzo è convalidato si dovrebbe avere un javascript che permette solo l'indirizzo da eliminare, non dovrebbe essere modificabile ... Qualunque sia l'approccio si prende, sto solo avvertendo che c'è qualche problema con solo controllando utilizzando la '' approccio inserito.

Si deve fare questo con Javascript. Dopo la virgola è digitato, solo allora si può passare l'e-mail di nuovo a C # backend per la verifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top