c# - 为什么 Blazor 假定可空组件参数不为空?
问题描述
我应该如何将可为空的值传递给 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 或其他元素。还有其他错误吗?您强调的错误可能是附带损害。
推荐阅读
- javascript - 计算给定代码的时间复杂度的问题
- javascript - 我需要在 classList 模板字符串 javascript 中增加一个数字
- javascript - 如何使用 px 像使用 rem 一样自动响应页面
- python - Python:在条件下使用数组的索引范围
- python-3.x - 在 Beautiful Soup 中抓取多个页面
- c# - 如何确定谁或什么杀死了我的 Windows 服务
- c++ - 为什么会发生此链接器警告和段错误?
- java - 将 JLabels 动态添加到 JScrollPane
- arrays - 在列表数组 C# 中验证相等的对象 Json
- node.js - 猫鼬中的空模式