如何在 aspnetcore razor 视图页面 (.cshtml) 中启用 #nullable

Ori*_*rds 7 razor asp.net-core razor-pages nullable-reference-types

可能重复,但我找不到任何相关内容。

\n

我有一个 asp.net core MVC 项目,它利用 Razor 的普通视图。

\n

我有一些具有可为空引用类型的 ViewModel 对象,并且我正在使用 C# 8 空安全功能来适当地标记这些对象(例如string? Name)

\n

我的问题是,当我在cshtml作为强类型模型时,不会应用空安全,因为我尚未为该文件启用它。

\n

如果它是一个.cs文件,我会坚持#nullable enable在顶部,但我能为 Razor 页面做什么?

\n
\n

更新以澄清:如果可能,我希望整个 razor 文件中的所有 @code 块都出现空安全警告。T\xc3\xa2n\的回答显示了如何为特定块启用它,但我希望它能实现这样的功能

\n
<span>@Model.Name.ToUpper()</span>\n
Run Code Online (Sandbox Code Playgroud)\n

具体来说,我想对 Name.ToUpper() 发出警告,因为 Name 可为空并且我没有使用 ? 调用 ToUpper 时的运算符

\n

Tân*_*Tân 6

您的问题中没有足够的信息来说明您需要做什么(例如:添加一些包、删除一些包...)

但默认情况下,Razor 语法支持#nullable,您可以在块内使用它@{}。

例子:

@{
    #nullable enable
    string name1 = User.Identity.Name.ToLower();
    #nullable disable

    // compiler won't complain anything here...
    string name2 = User.Identity.Name.ToLower();
}
Run Code Online (Sandbox Code Playgroud)

测试:

1

我csproj用来测试的文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)