如何检查是否在Blazor设置了属性



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

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

通过Foo属性

<MyComponent Foo="@foo" />
@code {
public Foo foo { get; set; }
}

未通过Foo属性

<MyComponent  />

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

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

您可以覆盖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://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.componentbase.setparametersasync?view=aspnetcore-3.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;
}
}
}

最新更新