Rom*_*Mik 4 asp.net-mvc asp.net-mvc-4
此代码应该将我的Section标记为可选.
_layout.cshtml
@RenderSection("ViewStyles",false)
Run Code Online (Sandbox Code Playgroud)
要么
@RenderSection("ViewStyles",required:false)
Run Code Online (Sandbox Code Playgroud)
我试过了两个.
然而,它引发了一个例外
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Run Code Online (Sandbox Code Playgroud)
我尝试在我的视图中添加一个空白部分,不需要使用ViewStyles部分
@section ViewStyles { }
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的例外.
还有另一种解决方法吗?
@ Chris-Pratt用他详细的答案引导我朝着正确的方向前进.我想分享我的代码以帮助:
我的问题是@RenderSection("Header",false)返回"对象引用未设置为对象的实例".踩抛出代码,它不会步进传递和破坏:

最后,我意识到这是破坏下一行代码:
<body class="@TempData[AppConstants.GlobalClass].ToString()
loggedin-@(User.Identity.Name.ToString().ToLower())">
Run Code Online (Sandbox Code Playgroud)
@TempData为null
这与你的部分无关。我不确定您从哪里得到空部分会生成此错误的想法,但这绝对不是正在发生的情况。Object reference not set to an instance of an object是当您尝试引用计算结果为 null 的变量的属性时生成的运行时错误。当变量本身在运行时解析为 时,某处有一些代码引用变量的属性(再次强调,这里不讨论部分)null。
例如,假设您执行以下操作:
Foo foo = db.Foos.Find(id);
Run Code Online (Sandbox Code Playgroud)
foovariable被定义为 a Foo,因此您可以引用它的任何属性Foo。如果您的Foo类有一个名为 的属性Bar。然后您可能会尝试通过以下方式在代码中的某个位置获取此属性的值:
foo.Bar
Run Code Online (Sandbox Code Playgroud)
这样就能编译得很好。但是,如果没有Foo找到 id 的值,则 的实际值为foo,null并且null不具有名为 的属性Bar,该属性只能在运行时确定。这就是错误告诉您正在发生的事情:在代码中的某个位置,您正在调用某个变量的属性,而没有首先检查变量的空值。在上面的示例中,您通常会执行以下操作:
Foo foo = db.Foos.Find(id);
if (foo != null)
{
bar = foo.Bar;
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用三元来提供某种后备:
bar = foo != null ? foo.Bar : "Baz";
Run Code Online (Sandbox Code Playgroud)
这样,bar将保存字符串 的值foo.Bar,或者如果foo为 null,则保存字符串"Baz"。
| 归档时间: |
|
| 查看次数: |
1523 次 |
| 最近记录: |