2014-07-26 3 views
0

Quel est le meilleur code pour éviter de jeter référence d'objet non définie à une instance d'un objet lors de l'utilisation Telerik Radtextbox? Les deux codes sont-ils les mêmes? Puis-je définir une valeur par défaut pour éviter les références nulles lors du lancement?radtextbox éviter objet lancer réglé sur référence d'objet non une instance d'un objet

protected void btnAddSAles_click(object sender, EventArgs e)   
{ 
    string orderName = Ordername.Text; 
} 

ou

protected void btnAddSAles_click(object sender, EventArgs e)   
{  
    TextBox b = item.FindControl("Ordername") as TextBox;    
    string box1 = b.text;    
} 
+0

Quel est le problème réel? Ces deux parties du code ont le _potential_ pour lancer cette exception. Sont-ils? –

+0

double possible de [Qu'est-ce qu'un NullReferenceException et comment puis-je résoudre ce problème?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

@GrantWinney il génère une erreur lors de l'affectation de la valeur de la zone de texte à une chaîne. Y at-il un moyen d'éviter de lancer nullexception? Apprécier ton aide. Merci – user3878949

Répondre

0

Je suis en supposantFindControl est de retour null de la fonte vous as essayer de faire. Je suppose (encore) qu'il ne trouve pas un contrôle nommé Ordername, par conséquent vous essayez d'accéder à une propriété Text sur un objet null, ce qui provoque le NullReferenceException.

Ce que vous devez faire est:

  1. Vérifiez pourquoi il n'y a pas de contrôle nommé Ordername, comme im supposant il devrait y avoir un
  2. Si le contrôle qui a invoqué la Button.Clickne peut toujours un objet TextBox, ajoutez un contrôle de nullité:

    protected void btnAddSAles_click(object sender, EventArgs e)   
    {  
        TextBox b = item.FindControl("Ordername") as TextBox;  
        if (b != null) 
        {  
         string box1 = b.text; 
        }   
    } 
    
+0

La zone de texte Ordername existe sur ma page, mais il y a des fois où l'erreur nullreference est renvoyée. Connaissez-vous un moyen de reproduire ce genre de problème? – user3878949

0

Les deux exemples de code ne sont pas les mêmes.

Le premier exemple ne lèvera pas cette exception, à moins que vous ne définissiez explicitement Ordername = null quelque part dans votre code, ce dont je doute que vous l'ayez fait.

Le deuxième échantillon va jeter parce que vous essayez de jeter un RadTextBox à un TextBox (je suppose, puisque vous vous posez au sujet RadTextBox), qui se traduit par b être null.

Si vous voulez éviter la possibilité d'une exception de référence null, alors vous devez vérifier null avant d'accéder à des propriétés sur le contrôle:

protected void btnAddSAles_click(object sender, EventArgs e)   
{  
    TextBox b = item.FindControl("Ordername") as TextBox; 

    if (b != null) 
    { 
     // do something with b.Text; 
    } 
} 

La vraie question ici est que vous êtes coulée à la mauvais type. Le RadTextBox ne dérive pas du contrôle natif TextBox. Vous devez lancer un RadTextBox.

protected void btnAddSAles_click(object sender, EventArgs e)   
{  
    RadTextBox b = item.FindControl("Ordername") as RadTextBox; 

    if (b != null) 
    { 
     // do something with b.Text; 
    } 
} 
+0

Merci est la chaîne orderName = Ordername.Text même que TextBox b = item.FindControl ("Ordername") comme TextBox string orderName = b.Text? – user3878949

+0

En supposant que vous trouviez le contrôle et le transtypiez au type correct, le résultat final des deux échantillons sera le même. –

+0

Ce problème est réellement intermittent. Il y a donc des fois où la référence zéro se produit parce qu'elle n'a pas pu trouver la radtextbox mais cela n'arrive pas tout le temps. Avez-vous une idée du scénario qui pourrait déclencher cette erreur? Est-ce qu'une publication peut provoquer ce problème ou quelque chose à faire avec sessionstate? Merci beaucoup d'avoir aidé – user3878949

Questions connexes