Question

Sur ma page un utilisateur (membres du personnel interne) peuvent saisir une liste séparée par des virgules des adresses e-mail. Ce que je voudrais faire est à chaque fois qu'une virgule est tapé, il vérifie que l'adresse e-mail nouvellement écrit est dans le carnet d'adresses.

Actuellement, j'ai le carnet d'adresses stocké comme Hashtable pour O (1) temps de recherche, mais je peux facilement passer à une autre structure de données si elle est recommandée.

Était-ce utile?

La solution

Vous pouvez le faire avec JavaScript et AJAX pour communiquer avec le serveur.

Vous pouvez faire les étapes suivantes:

  1. Créer un service Web qui obtient la chaîne du client (ce qui est l'e-mail que l'utilisateur a tapé), il vérifie et renvoie true / false.
  2. Ajouter [ScriptService] attribut à la classe de service Web.
  3. Sur la page, ajoutez une ASP.NET contrôle ScriptManager avec Scripts / ScriptReference qui pointe vers le service Web de l'étape 1.
  4. Sur la page, ajouter du code javascript qui accroche à l'événement onkeydown de la zone de texte des e-mails
  5. Dans ce gestionnaire d'événements, si l'utilisateur tape une virgule, exécuter une demande de service Web au serveur avec la valeur de zone de texte. Lorsque la répondiez (vrai ou faux) est reçu, faire tout ce dont vous avez besoin avec.

Vous pouvez en savoir plus sur MSDN et < a href = "http://msdn.microsoft.com/en-us/library/bb398822.aspx" rel = "nofollow noreferrer"> ici . Vous trouverez peut-être également utile extension AJAX saisie semi-automatique.

Autres conseils

Pour que cela se fasse à chaque touche, il va être javascript (ou côté client vbscript si vous utilisez IE) impliqués. Cela ne peut se faire sans si vous cherchez à le faire en fonction de l'entrée à clé.

Si vous deviez le faire lorsque l'utilisateur quitte cette zone de texte, vous pouvez utiliser autopostback et le code en C # sur le côté serveur - Je dois dire que, je pense que cette approche est laid. Exiger un postback synchrone pour valider les données est une énorme imposition sur l'utilisateur à mon avis, et donc ne devrait vraiment être un dernier recours ou un pis-aller alors que vous obtenez le script asynchrone pour faire le travail. Vous pouvez également le faire à temps après (quand ils essaient de soumettre le formulaire) et les valider et donner à l'utilisateur d'un message de validation si l'une des adresses échouent, mais encore une fois, cela est synchrone et l'utilisateur n'a pas obtenir le bénéfice des premiers commentaires.

I serait faire en utilisant soit un service Windows (ou utiliser le service RESTful) en utilisant un appel javascript (en utilisant l'objet XMLHttpRequest). Liez événement keydown de votre zone de texte à une méthode JavaScript.

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

Ensuite, configurez votre appel javascript - c'est le courage de ce qui se passe:

( Disclaimer: Ce code est pas prêt pour la production, il est simplement un exemple qui devrait vous donner une certaine direction)

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

Alors qu'est-ce que vous faites ici est mise en place d'un XMLHttpRequest, poussant les données dans et sa cuisson hors d'un service Web.

Votre application Web ASP.NET aura besoin d'un service Web intégré à ce qui sera fait la validation de l'adresse.

Je pourrais aussi mettre en garde: s'il y a seulement une seule adresse et l'utilisateur ne pas a frappé la virgule? Vous devez déplacer les entrailles de la méthode CheckInput () vers sa propre méthode qui analyse les adresses. La méthode KeyDown devrait vraiment seulement vérifier si le « » a été poussé. De cette façon, vous pouvez appeler le service Web pour vérifier si la zone de texte perd le focus aussi. Je voudrais également vous soucier de la modification des adresses existantes sans que l'utilisateur frappe à nouveau la virgule. Par conséquent, je me demande au sujet de cette approche. Je considère qu'une fois qu'une adresse est validée, vous devez avoir un javascript qui permet uniquement cette adresse à supprimer, il ne doit pas être modifiable ... quelle que soit l'approche que vous prenez, je suis juste vous avertir qu'il ya un certain problème avec juste vérifier les utiliser l'entrée '' approche.

Vous devez faire cela avec Javascript. Après la virgule est tapé, alors seulement vous pouvez passer l'e-mail Retour à backend C # pour la vérification.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top