Pregunta

En mi página, los usuarios (miembros del personal interno) pueden escribir una lista de direcciones de correo electrónico separadas por comas.Lo que me gustaría hacer es que cada vez que se escribe una coma se verifique que la dirección de correo electrónico recién escrita esté en la libreta de direcciones.

Actualmente tengo la libreta de direcciones almacenada como Hashtable para tiempos de búsqueda O(1), pero puedo cambiar fácilmente a otra estructura de datos si se recomienda.

¿Fue útil?

Solución

Usted puede hacer eso con JavaScript y AJAX para comunicarse con el servidor.

Puede hacer los siguientes pasos:

  1. Crear un servicio web que obtiene la cadena desde el cliente (que es el correo electrónico que el usuario ha tecleado), lo comprueba y devuelve verdadero / falso.
  2. Añadir atributo [ScriptService] a la clase de servicio web.
  3. En la página, agregar un ASP.NET con control ScriptManager Scripts / ScriptReference que apunta al servicio web desde el paso 1.
  4. En la página, añadir código JavaScript que se conecta al evento onkeydown del cuadro de texto mensajes de correo electrónico
  5. En este controlador de eventos, si el usuario escribe una coma, ejecutar una solicitud de servicio Web al servidor con el valor de texto. Cuando se recibe la responden (verdaderas o falsas), hacer lo que tiene con él.

Puede leer más en MSDN aquí y < a href = "http://msdn.microsoft.com/en-us/library/bb398822.aspx" rel = "nofollow noreferrer"> aquí . También pueden ser útiles las Autocompletar AJAX extensor .

Otros consejos

Para que esto se pueda hacer al presionar una tecla, habrá JavaScript (o vbscript del lado del cliente si está usando IE) involucrado.Esto no se puede hacer sin él si desea hacerlo basándose en una entrada clave.

Si tuviera que hacerlo cuando el usuario abandona ese cuadro de texto, entonces podría usar AutoPostback y codificarlo en C# en el lado del servidor; sin embargo, debo decir que creo que ese enfoque es feo.En mi opinión, requerir una devolución de datos sincrónica para validar los datos es una gran imposición para el usuario y, por lo tanto, solo debería ser un último recurso o una solución provisional mientras obtiene un script asincrónico para hacer el trabajo.También puede hacerlo en el momento de la publicación (cuando intentan enviar el formulario) y validarlos y devolverle al usuario un mensaje de validación si alguna de las direcciones falla, pero una vez más, esto es sincrónico y el usuario no. obtenga el beneficio de una retroalimentación temprana.

I Haría esto usando un servicio de Windows (o usaría el servicio RESTful) usando una llamada de JavaScript (usando el objeto XmlHttpRequest).Vincula el evento de pulsación de tecla de tu cuadro de texto a un método de JavaScript.

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

Luego configure su llamada de JavaScript: esto es lo esencial de lo que está pasando:

(Descargo de responsabilidad: Este código es no listo para producción, es simplemente un ejemplo que debería darle alguna dirección)

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

Entonces, lo que estás haciendo aquí es configurar una XMLHttpRequest, insertar los datos en ella y enviarla a un servicio web.

Su aplicación web ASP.NET necesitará un servicio web integrado que realizará la validación de la dirección.

También podría advertir:¿Qué pasa si solo hay una dirección y el usuario no ¿Pulsaste la coma?Deberías mover las entrañas del método CheckInput() a su propio método que analiza las direcciones.El método KeyDown realmente solo debería verificar si se presionó ','.De esta manera, puede llamar al servicio web para comprobar cuándo el cuadro de texto también pierde el foco.También me preocuparía la modificación de direcciones existentes sin que el usuario vuelva a pulsar la coma.Por lo tanto, me pregunto acerca de este enfoque.Consideraría que una vez validada una dirección deberías tener un javascript que solo permita eliminar esa dirección, no debería ser editable...Cualquiera que sea el enfoque que adopte, solo le advierto que existe algún problema al simplemente verificarlos usando el enfoque ingresado ','.

Hay que hacer esto con Javascript. Después se escribe la coma, sólo entonces se puede pasar el correo electrónico de vuelta a C # backend para su verificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top