radtextbox avoid object throwing Object reference not set to an instance of an object

653 views Asked by At

Which is a better code to avoid throwing Object reference not set to an instance of an object when using Telerik Radtextbox? Are both codes below the same? Can I set a default value to avoid nullreference from throwing?

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

or

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

There are 2 answers

1
Yuval Itzchakov On BEST ANSWER

I am assuming FindControl is returning null from the as cast you're trying to make. I assume (again) it isn't finding a control named Ordername, hence you are trying to access a Text property on a null object, which causes the NullReferenceException.

What you should do is:

  1. Check why there is no control named Ordername, as im assuming there should be one
  2. If the control which invoked the Button.Click may not always be a TextBox object, add a nullity check:

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

The two code samples are not the same.

The first sample won't throw that exception, unless you explicitly set Ordername = null somewhere in your code, which I doubt you did.

The second sample will throw because you're trying to cast a RadTextBox to a TextBox (I'm assuming, since you're asking about RadTextBox), which results in b being null.

If you want to avoid the possibility of a null reference exception, then you have to check for null before accessing properties on the control:

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

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

The real issue here is that you're casting to the wrong type. The RadTextBox does not derive from the native TextBox control. You have to cast to a RadTextBox.

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

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