构建自定义 Blazor 组件时,我可以要求组件参数吗?

Mar*_*rko 8 c# blazor

当我尝试构建 Blazor 组件时,我可以为它定义参数,如下所示:

@code {

   [Parameter]
   public string MyString { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

我的问题是我是否可以要求此参数,以便在使用组件时,除非我提供指定的参数,否则项目将不会构建?这是我应该担心的事情吗?我想我可以处理组件初始化中的任何无效值,如果值不是这样提供的,可能会抛出异常:

protected override void OnInitialized()
{
    base.OnInitialized();
    if (string.IsNullOrWhiteSpace(MyString)) {
       // throw an exception here...
    }
}
Run Code Online (Sandbox Code Playgroud)

但这是处理这个问题的正确方法吗?

Ben*_*ica 13

.NET 6 及更新版本

这可以通过[EditorRequired]属性来完成。例子:

[Parameter, EditorRequired]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

如果未提供参数,这将向组件的消费者发出 IDE 警告,告知其参数丢失。

.NET 6 之前

目前,你必须完全按照你说的去做。

  • C#11 和 .NET 7 引入了所需的修饰符。奇怪的是,在 Blazor 中,即使您将其标记为必需,您仍然可以跳过该参数。https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/required (3认同)
  • @Pawel 我也这么想并打开了这个问题。https://github.com/dotnet/aspnetcore/issues/44974 (3认同)

mfl*_*ehr 7

我喜欢[EditorRequired]与初始值结合使用null!

[Parameter, EditorRequired]
public string MyString { get; set; } = null!;
Run Code Online (Sandbox Code Playgroud)

从技术上讲,该值在运行之前将为 null OnInitialized(),例如在构造函数中。尽管如此,它还是比在其他地方将其视为可能为 null 更方便。


小智 5

我们发现添加这个可以.csproj让我们将警告视为构建错误。

<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <!-- Violations of EditorRequired (RZ2012) are turned into true errors -->
  <!-- https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings -->
  <WarningsAsErrors>RZ2012</WarningsAsErrors>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)