此代码应将我的部分标记为可选。
_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 { }
但我仍然得到同样的例外。
还有其他解决方法吗?
答案 0 :(得分:5)
@ Chris-Pratt以正确的答案引导我走向正确的方向。我想分享我的代码来帮忙:
我的问题是 @RenderSection(" Header",false)返回“对象引用未设置为对象的实例”。步进抛出代码,它不会步进通过和破坏:
最后,我意识到这是破解的下一行代码:
<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),但由于缺少布局页面中使用的应用程序设置而仍然出现错误。