asp.net-mvc – 根据需要设置RenderSection:false,但仍抛出“对象引用未设置为对象的实例”

此代码应该将我的Section标记为可选.

_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 {  }

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

还有另一种解决方法吗?

这与您的部分无关.我不确定你在哪里认为该部分为空是产生这个错误,但这绝对不是发生了什么.未设置为对象实例的对象引用是当您尝试从计算结果为null的变量引用属性时生成的运行时错误.当某个变量本身在运行时解析为null时,某处的某些代码会引用一个变量属性(同样,不再讨论这里的部分).

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

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

变量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为null,则为“Baz”字符串.

相关文章
相关标签/搜索