2012-01-24 2 views
1

J'ai un wizardcontrol, où en une seule étape l'utilisateur peut entrer son nom, emailaddress, etc. phonenumberJavaScript asp: Assistant

Lorsque la presse utilisateur sur le bouton « Suivant » de l'assistant, je suis vérifier la base de données pour voir s'il existe un compte existant avec le numéro de téléphone spécifié.

Si tel est le cas, le système est supposé demander à l'utilisateur s'il va lier la nouvelle information à ce numéro, ou s'il va entrer un nouveau numéro de téléphone. S'il dit qu'il va lier l'information, l'information est liée et l'assistant passe à l'étape 2, et s'il va entrer un nouveau numéro de téléphone, l'assistant reste à l'étape 1.

Le code ressemble à ceci:

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    if (Wizard1.ActiveStepIndex == 0) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text)) 
      { 
     //JavaScript popup or something, which prompts the user? 
      } 
     } 
    } 
} 

où le valideur est:

protected bool Mobile_ValidateForExistingUsers(string usrPhone) 
{ 
    bool IsValid = false; 

    using (SqlConnection conn = new SqlConnection(connString)) 
    using (SqlCommand cmd = new SqlCommand("spCheckMobile", conn)) 
    { 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@Mobile", usrPhone)); 

     cmd.Connection.Open(); 

     object result = cmd.ExecuteScalar(); 

     if (result == null) 
     { 
      IsValid = true; 
     } 
    } 
    return IsValid; 
} 

Comment demander à l'utilisateur cette question, et soit continuer ou le laisser entrer de nouvelles informations dans un sorcier?

Répondre

0

Je pense que le moyen le plus efficace de gérer cela serait de faire de la fonction Mobile_ValidateForExistingUsers(phoneNumber) une méthode WebMethod pour un appel AJAX. Une fois que vous avez écrit le code AJAX, associez l'appel AJAX à un <asp:CustomValidator> pour sa fonction de validation côté client et s'il renvoie false, faites suivre votre window.alert('use new number'). Vous pouvez également gérer la plus grande partie de ce code par l'intermédiaire d'un <asp:CustomValidator>, bien qu'il ne soit pas nécessaire de définir une fonction de validation côté client si vous gérez le côté serveur de validation. Définissez simplement la propriété CustomValidator1.IsValid sur les résultats de la fonction Mobile_ValidateForExistingUsers(phoneNumber), puis appelez le Page.Validate() pour voir si la page est toujours valide. Si ce n'est pas le cas, signalez une entrée cachée runat="server" et demandez à l'utilisateur de saisir un code côté client sur window.onload et, s'il veut utiliser le nouveau numéro, stockez-le dans un second champ masqué. Exemple suit:

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    if (Wizard1.ActiveStepIndex == 0) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      if (HiddenField2.Value == '') //Client-side Flag not set 
      { 
       if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text)) 
       { 
        CustomValidator1.IsValid = false; // Invalidate the page so the Next Step fails. 
        HiddenField1.Value = false;   // Page will get re-rendered to client to fix errors and stay on the same step. 
       } 
      } 
      else 
      { 
       if (HiddenField2.Value == 'true') 
       { 
        // Use new binding logic. 
       } 
       else 
       { 
        //User does not want to use new number, so logic to handle goes here. 
       } 
      } 

     } 
    } 
} 

Et puis quelque part dans le balisage côté client:

/* 
* Crude example 
*/ 
<script type="text/javascript"> 
    window.onload = function() { 
     'use strict'; 
     var hf1 = document.getElementById('<%=HiddenField1.ClientID %>'); 
     var hf2 = document.getElementById('<%=HiddenField2.ClientID %>'); 
     var myForm = document.getElementById('<%=Form1.ClientID %>'); 
     if (hf1.value === 'false') { // or if (hf1.value) if you just want the truthiness of the value's existence (depending on how you flag stuff) 
      hf2.value = window.confirm('Wanna use this number?').toString().toLowerCase(); 
     } 
     myForm.submit(); 
    } 
</script> 

Hope this helps,

Pete