【问题标题】:How do I enforce a parameter in a blazor component?如何在 blazor 组件中强制执行参数?
【发布时间】:2022-10-12 21:27:47
【问题描述】:
<MyComponent MyParameter="@MyParameter"></MyComponent>

我想要我的组件标签在没有提供值时抛出错误我的参数范围。

【问题讨论】:

  • ParametersSetOnInitialized 事件覆盖MyComponent 代码部分对其进行空检查,如果为空则抛出错误。
  • 看,.Net 的 EditForm 组件在未提供 Model 参数时会引发错误,这就是我希望遇到的错误。 &lt;EditForm &gt;&lt;/EditForm&gt;

标签: blazor


【解决方案1】:

其他两个答案都是有效的,但我会这样做:

    public override Task SetParametersAsync(ParameterView parameters)
    {
        parameters.SetParameterProperties(this);
        if (MyParameter == null)
            throw new InvalidOperationException($"{nameof(MyComponent)} requires a {nameof(MyParameter)} parameter.");

        return base.SetParametersAsync(ParameterView.Empty);
    }

为什么? SetParametersAsync是Renderer在组件上调用的入口方法:没有运行组件代码。如果,假设您在OnParametersSet{Async} 中进行了检查,那么您可能已经尝试在OnInitialized{Async} 中使用它——您还没有告诉我们为什么必须设置它!

【讨论】:

    【解决方案2】:

    MrC aka Shaun Curtis 的回答在运行时完成了工作,但如果您愿意,您可以更进一步并在您的参数上使用 EditorRequired 注释。如果未设置参数,这将在设计时创建警告。

    [Parameter]
    [EditorRequired]
    public string MyParameter { get; set; }
    

    需要 .NET 6,阅读更多 here

    但是,这不会在运行时引发错误,因此您仍然需要检查参数。

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 2020-05-12
      • 2019-11-12
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多