【问题标题】:How do I do #nullable enable in an aspnetcore razor view page (.cshtml)如何在 aspnetcore razor 视图页面 (.cshtml) 中启用#nullable
【发布时间】:2021-02-14 14:55:36
【问题描述】:

可能重复,但我一直无法找到任何关于此的内容。

我有一个 asp.net 核心 MVC 项目,它使用 Razor 使用普通视图。

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

我的问题是,当我在 cshtml 文件中使用这些变量作为强类型模型时,不会应用空安全性,因为我没有为文件启用它。

如果是.cs 文件,我会在顶部粘贴#nullable enable,但是对于剃须刀页面我可以做什么?


更新澄清:如果可能,我希望在整个 razor 文件中的所有 @code 块上都显示空安全警告。 Tân's answer 展示了如何为特定块启用它,但我喜欢这样的东西

<span>@Model.Name.ToUpper()</span>

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

【问题讨论】:

  • 为什么要把它放在你的视野中? view 可以处理 null 值,如果有 null 值会报错吗?
  • 我希望编译器在我不安全地使用一些可空变量时给我警告。例如,如果我在我看来这样做:@User.Name.ToLower() 如果 Name 为空,那将崩溃,因为我应该先做 @User.Name?.ToLower() 或空检查它。 #nullable 会在那里给出额外的警告,如果可能的话,我希望它们出现在视图中

标签: asp.net-core razor razor-pages nullable-reference-types


【解决方案1】:

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

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

例子:

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

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

测试:

我的csproj 文件我曾经测试过:

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

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

</Project>

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 2018-07-18
    • 2012-03-29
    • 1970-01-01
    • 2018-01-26
    • 2021-09-12
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多