[英]InputSelect with null reference in Blazor
I'm using an InputSelect in my razor component, but in the console I always see this error:我在我的剃须刀组件中使用 InputSelect,但在控制台中我总是看到这个错误:
System.NullReferenceException: Object reference not set to an instance of an object.
System.NullReferenceException:对象引用未设置为对象的实例。 at VidaConfortoApplication.Client.Pages.ServiceTypes.Add.b__0_7(RenderTreeBuilder __builder3) in C:\repos\sources\VidaConfortoTese\src\VidaConfortoApplication\VidaConfortoApplication\Client\Pages\ServiceTypes\Add.razor:line 18 at Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder.AddContent(Int32 sequence, RenderFragment fragment) at Microsoft.AspNetCore.Components.Forms.InputSelect`1[[System.Int64, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].BuildRenderTree(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
在 VidaConfortoApplication.Client.Pages.ServiceTypes.Add.b__0_7(RenderTreeBuilder __builder3) 在 C:\repos\sources\VidaConfortoTese\src\VidaConfortoApplication\VidaConfortoApplication\Client\Pages\ServiceTypes\Add.razor:Microsoft.AspNetCore.Components 的第 18 行.Rendering.RenderTreeBuilder.AddContent(Int32 序列,RenderFragment 片段)在 Microsoft.AspNetCore.Components.Forms.InputSelect`1 [[System.Int64,System.Private.CoreLib,版本 = 6.0.0.0,文化 = 中性,PublicKeyToken = 7cec85d7bea7798e ]].BuildRenderTree(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
I do not understand what I am doing wrong.我不明白我做错了什么。
Component:零件:
<EditForm Model="@_model" OnValidSubmit="OnValidSubmit">
<DataAnnotationsValidator />
<div class="form-row">
<div class="form-group col">
<label>Serviço pai</label>
<InputSelect class="form-control" @bind-Value="@_model.ParentId">
<option value="">--</option>
@foreach (var service in _services)
{
<option value="@service.Id">@service.Name</option>
}
</InputSelect>
<label>@_serviceHierarchy</label>
<ValidationMessage For="@(() => _model.ParentId)"/>
</div>
</div>
<br />
<div class="form-group">
<button class="btn btn-primary">
Save
</button>
</div>
</EditForm>
@code {
private readonly AddServiceTypeViewModel _model = new();
private IEnumerable<ServiceType> _services;
protected override async Task OnInitializedAsync()
{
_services = await ServiceTypeService.GetAll();
}
}
Class AddServiceTypeViewModel类 AddServiceTypeViewModel
public class AddServiceTypeViewModel
{
[Required]
public string Name { get; set; }
public long? ParentId { get; set; }
public string? Description { get; set; }
}
Class ServiceType类服务类型
public class ServiceType
{
public string Name { get; set; }
public long? ParentId { get; set; }
public ServiceType? Parent { get; set; }
public string? PathToService { get; set; }
public string? Description { get; set; }
public DateTime? AddedWhen { get; set; }
public DateTime? UpdatedWhen { get; set; }
public long Id { get; set; }
}
Your template is trying to access the "_services" property to render some piece of html before it's initialized.您的模板正在尝试访问“_services”属性以在初始化之前呈现一些 html。 To avoid this,
为了避免这种情况,
You can initialize it to an empty list:您可以将其初始化为一个空列表:
private IEnumerable<ServiceType> _services = new List<ServiceType>();
or或者
You can put a guard on the template code:您可以对模板代码进行保护:
if (_services is not null) { @foreach (var service in _services) { <option value="@service.Id">@service.Name</option> } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.