2012-02-24 3 views
0

J'essaye d'écrire les détails de connexion d'utilisateur à la base de données. Lorsque je clique sur le bouton Envoyer, j'obtiens une exception NullReferenceException. Il y a 4 TextBoxes Nom d'utilisateur, Email, Mot de passe et ConfirmPassword.ASP.NET NullReferenceException

protected void Button1_Click(object sender, EventArgs e) 
     { 
      if ((RegisterUserWizardStep.FindControl("Password") as TextBox).Text == (RegisterUserWizardStep.FindControl("ConfirmPassword") as TextBox).Text) 
      { 
       //call the method to execute insert to the database 
       ExecuteInsert((RegisterUserWizardStep.FindControl("UserName") as TextBox).Text, 
           (RegisterUserWizardStep.FindControl("Email") as TextBox).Text, 
          (RegisterUserWizardStep.FindControl("Password") as TextBox).Text); 
       Response.Write("Record was successfully added!"); 
       ClearControls(Page); 
      } 
      else 
      { 
       Response.Write("Password did not match"); 
       (RegisterUserWizardStep.FindControl("Password") as TextBox).Focus(); 
      } 
     } 

Merci.

+1

Sur quelle ligne l'exception se produit-elle? –

+0

Et quand vous cassez sur l'exception quelles valeurs qu'il utilise sont nulles? Répondez à ces questions et vous avez à peu près résolu votre problème. ;-) – Chris

+0

Aussi, juste pour vérifier. Dans votre description, vous avez dit que vous avez un TextBox 'Username'.Le code recherche 'RegisterUserWizardStep.FindControl (" UserName ")'. Est-ce une faute de frappe dans la question? –

Répondre

0

Il est probable que FindControl n'a pas trouvé le contrôle que vous êtes après, peut-être parce que les zones de texte sont nested under another child control comme un panneau, etc.

Au lieu de

if ((RegisterUserWizardStep.FindControl("Password") as TextBox).Text 

essayer

TextBox passwordTextBox = RegisterUserWizardStep.FindControl("Password") as TextBox; 
// .. same for username and email 
if ((passwordTextBox != null) && (usernameTextBox != null) ...) 
{ 
// Do something with the textboxes 
} 
// else you have a bug 

Cela vous empêchera également de répéter le code FindControl sur le même contrôle (principe DRY)

+0

Merci. Ça a marché..:) – android

1

Vous mentionnez il y a quatre contrôles - Nom d'utilisateur, email, mot de passe et ConfirmPassword

L'exception nulle que vous voyez est presque certainement parce que FindControl (X) retourne null

Une meilleure façon de vérifier est de faire quelque chose comme:

TextBox myTextBox = RegisterUserWizardStep.FindControl(X) as TextBox; 

if(myTextBox != null){ 
    //Continue 
} 
else{ 
    //Write out some error information - now you know what the problem is. 
} 

de plus, et ce n'est pas lié à votre erreur immédiate, mais vous nourrissez le contenu de chacune des zones de texte directement dans votre méthode de executeInsert - vous feriez mieux de faire quelques validation, aussi, juste pour vérifier que vous avez des valeurs attendues.

0

code comme RegisterUserWizardStep.FindControl("UserName") as TextBox retournera null non plus s'il n'y a pas de contrôle nommé UserName ou si le contrôle du nom UserName ne peut pas être jeté à un TextBox. C'est probablement la source de votre exception, car vous essayez d'obtenir la propriété Text d'une référence qui pourrait être null.

Pour mieux comprendre où le problème est que vous pouvez définir une fonction d'extension:

static class ControlExtensions { 

    public T Find(this Control parent, String name) where T : Control { 
    var control = parent.FindControl(name); 
    if (control == null) 
     throw new ArgumentException(String.Format("Cannot find control named '{0}'.", name); 
    var t = control as T; 
    if (t == null) 
     throw new ArgumentException(String.Format("Control named '{0}' does not have type '{1}.", name, typeof(T).Name); 
    return t; 
    } 

} 

Vous pouvez alors obtenir la propriété Text du UserName contrôle:

RegisterUserWizardStep.Find<TextBox>("UserName").Text 

Cet appel jetteront un plus exception descriptive si le contrôle n'est pas trouvé.

0

Dans votre description, vous avez dit que vous avez un TextBox Username.

Le code recherche RegisterUserWizardStep.FindControl("UserName").

Est-ce une faute de frappe dans la question? sinon, cela pourrait être la cause de l'exception.

Questions connexes