对象引用未设置为对象的实例

3
在这段代码中
  <% var tmp = int.Parse(ViewData["numOfGroups"].ToString()); %>

我有一个错误:Object reference not set to an instance of an object。如何正确地将ViewData["numOfGroups"]转换为int

可能是什么是NullReferenceException,我该如何修复它?的重复问题。 - tom redfern
4个回答

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
如果错误与将ViewData["numOfGroups"]转换为整数有关,则会得到FormatException。请检查您是否真正向视图传递了数据,并且其中包含numOfGroups键。

0

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

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

但是首先要检查对象是否为空,或者如果有任何可能转换失败的情况,请使用try/catch进行包围... ...或者使用TryParse(),它返回一个布尔值,指示转换是否成功。


你的代码无法编译,我猜你想表达的是 (int)ViewData["numOfGroups"],但这仍然会导致空引用异常。在 OP 发布的代码中,最可能的空引用异常是 ViewData["NoOfGRoups"] 为空。 - Rune FS

0

看起来 ViewData["numOfGroups"] 是空的。问题很可能不在转换本身,而是在 ViewData["numOfGroups"].ToString() 中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接