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

时间:2020-04-13 18:03:02

标签: c# blazor

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

MyComponent内部,我要区别的是这两种情况

传递Foo属性

<MyComponent Foo="@foo" />

@code {
    public Foo foo { get; set; }
}

不传递Foo属性

<MyComponent  />

但是在两种情况下,在MyComponent中,Foo将是null

即使值是Foo的值,我怎么知道正在传递default属性?

2 个答案:

答案 0 :(得分:3)

您可以重写SetParametersAsync方法以检查是否设置了参数。即使该值为null。 如果未指定该参数,则它将不会出现在集合中。

例如

@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);

    }
}

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

答案 1 :(得分:-1)

<h3>Component</h3>

@code {
    private bool _setFromOutside;
    private Foo _foo = new Foo(); //values set from inside of your component

    [Parameter]
    public Foo Foo
    {
        get => _foo;
        set
        {
            _setFromOutside = true;
            _foo = value;
        }
    }
}