Checking to see if ViewBag has a property or not, to conditionally inject JavaScript

Saeed Neamati picture Saeed Neamati · Dec 27, 2011 · Viewed 50.3k times · Source

Consider this simple controller:

Porduct product = new Product(){
  // Creating a product object;
};
try
{
   productManager.SaveProduct(product);
   return RedirectToAction("List");
}
catch (Exception ex)
{
   ViewBag.ErrorMessage = ex.Message;
   return View("Create", product);
}

Now, in my Create view, I want to check ViewBag object, to see if it has Error property or not. If it has the error property, I need to inject some JavaScript into the page, to show the error message to my user.

I created an extension method to check this:

public static bool Has (this object obj, string propertyName) 
{
    Type type = obj.GetType();
    return type.GetProperty(propertyName) != null;
}

Then, in the Create view, I wrote this line of code:

@if (ViewBag.Has("Error"))
{
    // Injecting JavaScript here
}

However, I get this error:

Cannot perform runtime binding on a null reference

Any idea?

Answer

jazzcat picture jazzcat · Jun 22, 2012
@if (ViewBag.Error!=null)
{
    // Injecting JavaScript here
}