RenderSection根据需要设置:false,但仍然抛出"对象引用未设置为对象的实例"

时间:2014-11-19 17:22:53

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

此代码应将我的部分标记为可选。

_layout.cshtml 
@RenderSection("ViewStyles",false)

@RenderSection("ViewStyles",required:false)

我试过了两个。

然而,它引发了异常

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

我尝试在我的视图中添加一个空白部分,不需要使用ViewStyles部分

@section ViewStyles {  }

但我仍然得到同样的例外。

还有其他解决方法吗?

3 个答案:

答案 0 :(得分:5)

@ Chris-Pratt以正确的答案引导我走向正确的方向。我想分享我的代码来帮忙:

我的问题是 @RenderSection(" Header",false)返回“对象引用未设置为对象的实例”。步进抛出代码,它不会步进通过和破坏:

header section

最后,我意识到这是破解的下一行代码:

<body class="@TempData[AppConstants.GlobalClass].ToString() 
         loggedin-@(User.Identity.Name.ToString().ToLower())">

@TempData 为空

答案 1 :(得分:2)

这与您的部分无关。 我不确定您认为该部分为空的原因是产生此错误,但是绝对是发生了什么。 Object reference not set to an instance of an object是您尝试从计算结果为null的变量引用属性时生成的运行时错误。当某个变量本身在运行时解析为null时,某处的某些代码会引用一个变量的属性(同样,不再讨论这里的部分)。

例如,假设您执行以下操作:

Foo foo = db.Foos.Find(id);

variable foo被定义为Foo,因此您可以引用Foo之外的任何属性。如果您的Foo类有一个名为Bar的属性。然后,您可以尝试通过以下方式在代码中的某处获取此属性的值:

foo.Bar

那将编译得很好。但是,如果找不到包含ID的Foo,那么foo的实际值为null,而null 具有属性名为Bar,只能在运行时确定。这就是错误告诉您正在发生的事情: 代码中的某个地方,您在不检查变量的空值的情况下调用某个变量的属性 。在上面的示例中,您通常会执行以下操作:

Foo foo = db.Foos.Find(id);
if (foo != null)
{
    bar = foo.Bar;
}

您还可以使用三元数来提供某种后备:

bar = foo != null ? foo.Bar : "Baz";

这样,bar将保留foo.Bar的值或如果foo为空,则为"Baz"字符串。

答案 2 :(得分:1)

我有@RenderSection(“ ViewStyles”,required:false),但由于缺少布局页面中使用的应用程序设置而仍然出现错误。