如何检查 Blazor 中是否已设置属性?

Ven*_*sky 3 c# blazor

我最大的问题是当我有一个可以为空的属性时,但我想检查它是否已设置,即使该值是null

在我里面MyComponent我想要区别的是这两种情况

传递Foo财产

<MyComponent Foo="@foo" />

@code {
    public Foo foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

不传递Foo财产

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

MyComponent在这两种情况下,内部Foo都会是null

Foo即使值是值,我如何知道属性正在被传递default

Ren*_*eno 6

您可以重写 SetParametersAsync 方法来检查已设置或未设置的参数。即使该值为空。如果未指定该参数,它将不会出现在集合中。

例如

@code {

    [Parameter]
    public Foo Foo { get; set; }

    public override async Task SetParametersAsync(ParameterView parameters)
    {
        foreach(var prm in parameters)
        {
            System.Diagnostics.Debug.WriteLine($"Name: {prm.Name}");
            System.Diagnostics.Debug.WriteLine($"Value: {prm.Value?.ToString()}");
        }

        await base.SetParametersAsync(parameters);

    }
}
Run Code Online (Sandbox Code Playgroud)

文档:https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.componentbase.setparametersasync ?view=aspnetcore-3.1