你调用的对象是空的

时间:2010-07-27 08:49:27

标签: c# asp.net-mvc

在这行代码中

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

我有错误:Object reference not set to an instance of an object。如何正确转换

ViewData["numOfGroups"]int

4 个答案:

答案 0 :(得分:5)

首先应确保控制器操作正在设置此变量:

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

完成此操作后,您将不再获得NullReferenceException并且您的代码应该可以运行。

当然,由于我已在此处多次编写,因此您应该更喜欢强类型视图而不是ViewData。您还应该相应地键入模型属性。解析字符串不是视图的责任。所以:

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

在你看来:

<% var tmp = Model.NumOfGroups; %>

顺便说一下,这也应该避免,因为我觉得你在视图中声明了变量,这意味着你有意使用它们。视图不是用于声明变量和编写C#代码。它们是标记。

答案 1 :(得分:1)

如果错误与将ViewData["numOfGroups"]转换为int相关,那么您将获得FormatException。检查您是否确实将数据传递给视图,并且它包含numOfGroups密钥。

答案 2 :(得分:0)

似乎ViewData["numOfGroups"]为空。问题很可能不在转换本身,而在于ViewData["numOfGroups"].ToString()

答案 3 :(得分:0)

由于ViewData字典包含<string, object>,您必须对值进行拆箱:

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

但如果转换无法正常工作,请检查对象是否为空,或者通过try / catch进行环绕... ...或者如果转换成功,则使用返回bool的TryParse()