实例化对象时的ASP.net NullReferenceException

时间:2014-06-10 07:42:59

标签: asp.net asp.net-mvc-4 nullreferenceexception

我有一个视图,其中包含一个我从ViewData字典中获取的变量。代码看起来像

@{
    ParentModel parent = (ParentModel)ViewData["Parent"];
}

我虽然没问题,但是因为ViewData字典中不存在该对象所以我应该软件转换它并在使用之前检查它是否为null。所以我把它改成了

@{
    ParentModel parent = ViewData["Parent"] as ParentModel;
}

但我仍然在这一行得到一个空引用异常。所以测试一下我把它改成了

@{
    ParentModel parent = new ParentModel();
}

它仍然会引发异常。到底发生了什么,为什么在视图中实例化一个对象会抛出一个空引用异常?

更新

我在视图顶部移除了一个未使用的崇敬者,resharper让我知道,下一个使用引用显示此错误

“没有为扩展程序cshtml注册的构建提供程序”

我认为ASP.Net出了问题,在线查看有些人建议在Web.config上添加一些东西,但是我检查了版本控制,这没有改变,为什么这个问题才刚刚开始发生

2 个答案:

答案 0 :(得分:1)

如果您在此行中获得空引用异常:

@{
    ParentModel parent = ViewData["Parent"] as ParentModel;
 }

然后它自己的ViewData为null。您必须在使用之前实例化ViewData。

答案 1 :(得分:0)

事实证明,模型本身是在显示模板视图中使用的null,该模型与从ViewData检索的Parent对象以及抛出异常的行完全不同。

我不确定为什么VS会在错误的行上中断,但可能是因为此代码块是模型声明后的第一个列表。例如

@using MyProject.Models
@model ItemModel  <---- VS2010 should break here
@{
    ItemModel parent = ViewData["Parent"] as ItemModel; <-----VS2010 Breaks here
}
<h2>@Model.Title</h2>