为什么 Blazor 假定可为空的组件参数为非空?

Why does Blazor assume a nullable component parameter is non-null?

我应该如何将可为 null 的值传递到 Blazor 组件中?目前我在构建期间遇到错误,抱怨我的值不能为空,但组件参数设置为 int?.

组件库:

public class ProjectNameInputBase : ComponentBase
{
    private string[] _existingProjectNames = new string[0];
    private bool _loaded;

    [Parameter]
    public int? CompanyId { get; set; }

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

    [Parameter]
    public EventCallback<string> ProjectNameChanged { get; set; }

    protected bool Disabled => _loaded;
    protected string[] Errors => 
        _existingProjectNames
            .Where(name => AreNamesEqual(name, ProjectName))
            .Select(name => $"Project with name \"{name}\" already exists in the company")
            .ToArray();

    protected async override Task OnParametersSetAsync()
    {
        if (CompanyId.HasValue)
        {
            _existingProjectNames = await FetchProjectNamesAsync(CompanyId.Value);
            _loaded = true;
        }
    }

    protected async Task HandleProjectNameChanged(ChangeEventArgs e)
    {
        if (ProjectNameChanged.HasDelegate)
        {
            await ProjectNameChanged.InvokeAsync(e.Value as string);
        }
    }

    private static bool AreNamesEqual(string a, string b) => a.Trim().ToLower() == b.Trim().ToLower();

    private async Task<string[]> FetchProjectNamesAsync(int companyId)
    {
        await Task.Delay(500);
        return new[] {
            "Project 1",
            "Project 2",
            "Project 3"
        };
    }
}

组件:

@inherits ProjectNameInputBase

<input type="text" value="@ProjectName" @onchange="@HandleProjectNameChanged" disabled="@Disabled" />
@foreach (var error in Errors)
{
    <small class="error">@error</small>
}

消费组件:

<label>
    Project Name
    <ProjectNameInput CompanyId="@Company?.Id" @bind-ProjectName="@ProjectName" />
</label>

截图:

无复现,使用 .net 5。

您使用的是旧版本,或者您缺少(拼写错误)@ProjectName 或其他元素。还有其他错误吗?您强调的错误可能是附带损害。

无法在其他机器上重现。我的 visual studio 实例似乎存在问题。完全相同的代码在另一台机器上运行。

这是IDE的错。只需关闭 Visual Studio。再次打开后。会好的。