Ognjen
Ognjen

Reputation: 1195

Object reference not set to an instance of an object

In this line of code

  <% var tmp = int.Parse(ViewData["numOfGroups"].ToString()); %>

I have error:Object reference not set to an instance of an object. How correctly convert

ViewData["numOfGroups"] to int?

Upvotes: 3

Views: 9710

Answers (4)

TehBoyan
TehBoyan

Reputation: 6890

Since ViewData dictionary contains <string, object> you have to do unboxing on the value:

int tmp = (int)ViewData["numOfGroups"];

but check if the object is null first or surround by try/catch if there's any chance the conversion will not work... ...or use TryParse() that returns bool if the conversion succeeded or not.

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1038810

You should first make sure that your controller action is setting this variable:

public ActionResult Index()
{
    ViewData["numOfGroups"] = "15";
    return View();
}

Once you've done this you should no longer get a NullReferenceException and your code should work.

Of course as I've already written it multiple times here you should prefer strongly typed view instead of ViewData. Also you should type your model properties accordingly. It is not the responsibility of the view to parse strings. So:

public ActionResult Index()
{
    var model = new MyModel
    {
        NumOfGroups = 15
    };
    return View(model);
}

And in your view:

<% var tmp = Model.NumOfGroups; %>

By the way this should also be avoided as I have the feeling that you are declaring variables in your view which means that you have the intent of using them. Views are not for declaring variables and writing C# code. They are markup.

Upvotes: 5

Giorgi
Giorgi

Reputation: 30883

If the error was related to converting ViewData["numOfGroups"] to int then you would get FormatException. Check that you are really passing data to the view and that it contains numOfGroups key.

Upvotes: 1

Incognito
Incognito

Reputation: 16577

Seems ViewData["numOfGroups"] is null. It is quite possible that problem is not in conversion itself but in ViewData["numOfGroups"].ToString().

Upvotes: 0

Related Questions