2012-01-07 1 views
1

Je travaille sur une application qui a un formulaire d'inscription et je dois afficher à l'utilisateur si le nom d'utilisateur existe ou non. J'utilise asp.net mvc3 et prévoyais d'utiliser AJAX pour y parvenir.Comment vérifier si le nom d'utilisateur existe déjà en utilisant ajax dans asp.net?

J'ai une forme

<tr> 
<td>User Name*</td> 
<td><input id="UserName" name="UserName" type="text" onblur="check(this.value);"/></td> 
<td id= "UName"></td> 
</tr> 

qui appelle un fichier .js qui a le contenu Fölling

function check(User) { 
    ... 
    var url = "/UserNameCheck/Index"; 
    url += "?User=" + User; 
    xmlHttp.onreadystatechange = state_Change; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
} 
function state_Change() { 
    if (xmlhttp.readyState == 4) {// 4 = "Response loaded" 

     if (xmlhttp.status == 200) {// 200 = Response Error Free    
      document.getElementById("UName").innerHTML = xmlHttp.responseText 
     } 
     else { 
      alert("Problem retrieving XML data"); 
     } 
    } 
} 

J'alertés le nom d'utilisateur et je reçois la valeur correcte que j'étais entré. Maintenant, l'URL est/UserNameCheck/Index où UserNameCheck est un contrôleur et Index est une méthode dans cela.

Le contrôleur a ce code.

public ActionResult Index(string User) 
     { 
      string UserName; 
      try 
      { 
       Response.Cache.SetCacheability(HttpCacheability.NoCache); 
       UserName = Request.QueryString["User"]; 
       ConnectionPackage.ConnectionClass cc = new ConnectionPackage.ConnectionClass(); 
       conn = cc.con; 
       string sql = "Select UserName FROM UserDetails where UserName = '" + UserName + "'"; 
       conn.Open(); 
       SqlCommand cmd = new SqlCommand(sql, conn); 
       cmd.CommandType = CommandType.Text; 
       object p = cmd.ExecuteScalar(); 
       cmd.ExecuteNonQuery(); 
       string u = (string)p; 
       if (u.Length==0 || u.Equals("NULL") || u.Equals("null")||u.Equals("Null")) 
       { 
        return View(); 
       } 

       return null; 
      } 
      catch (Exception ex){ 
      } 

et la vue a

String buffer = " <table><tr><td id = 'UName' >" This user name already exists. Please select some other unser name. 
buffer = buffer + "</td></tr></table>"; 
response.getWriter().println(buffer); 

J'ai aussi essayé d'écrire

Response.Clear(); 
Response.Write("UserName already exists. Please select another UserName"); 
Response.End(); 

au lieu de retourner View. Mais dans les deux cas, je n'ai reçu aucun message indiquant que le nom d'utilisateur existe bien que j'ai tapé un nom d'utilisateur qui était déjà présent dans la base de données.

La chaîne de connexion fonctionne pour l'insertion dans la base de données, donc je ne pense pas qu'il y ait un problème avec cela. Y at-il un problème avec l'URL que j'ai mentionné dans le fichier js? Ou est-ce que toute mon approche est incorrecte? Je suis fondamentalement d'origine java alors ne sais pas beaucoup sur asp.net. S'il te plaît, aide-moi.

Merci beaucoup d'avance.

Répondre

1

Vous vous débrouillez bien, mais vous pourriez vous faciliter la tâche. Si vous utilisez MVC3 avec Razor, votre application a déjà installé jQuery.

  1. Utilisez la méthode $.ajax() pour effectuer les appels à votre action de contrôleur qui vérifie les noms ...

  2. Liez le .ajax $() appellent « discrètement » qui signifie plutôt que sur votre commande HTML, lier l'événement à votre contrôle à partir du jquery/javascript.

  3. Deuxièmement, si vous voulez un peu de performances de fantaisie, vous pouvez lier via la fonction live() jquery ou d'un événement keyup, de sorte que vous tapez l'appel ajax est fait et vous découvrez en temps réel.

En fin de compte, vous arriverez à beaucoup moins de javascript, et vos contenus JS seront séparés de votre balisage. En ce qui concerne l'action de votre contrôleur, il semble bon de jouer et d'apprendre, mais vous voudriez penser à (a) mettre votre instruction SQL comme une procédure stockée sur le serveur db et l'appeler, ou (b) en écrivant une classe de modèle de référentiel, puis en utilisant LINQ pour que votre requête fonctionne après la récupération de DB.

Une autre possibilité serait d'utiliser Entity Framework 4.1 via NuGet pour éliminer les deux besoins. Cela peut avoir une certaine courbe d'apprentissage, mais il y a beaucoup de bonnes choses et votre exemple serait assez simple pour commencer. Faites-moi savoir si vous avez des problèmes spécifiques avec votre code et je peux fournir une réponse plus détaillée.

+0

Merci beaucoup. Mais honnêtement, je n'ai jamais utilisé jQuery auparavant. Pouvez-vous suggérer de bonnes sources pour que je puisse l'apprendre? Et ce serait génial s'il y avait aussi des exemples concrets. Merci beaucoup encore. – Sathya

+0

@Sathya Commencez avec la source la plus réputée - c'est le propriétaire. http://docs.jquery.com/Tutorials - Je pense que vous le trouverez très facile à utiliser ... quand vous avez terminé avec un ou deux tutoriels ... regardez les événements 'live' et' keyup' dont j'ai parlé et google quelques exemples. C'est un gâteau. –

Questions connexes