开拓者。单击多次时,NavLink 在 foreach 块中不起作用
Blazor. NavLink is not working in a foreach block when clicking multiply times
我创建了 NavLink
的列表,这只是它们之间的一个区别,动态参数 Id
<div>
@foreach (var service in pageGlobal.Person.Services)
{
var link = $"service_description/{service.Identifier}";
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="@link">
@service.Name
</NavLink>
</li>
</ul>
}
</div>
并且只有在我第一次点击时它才有效(无论是什么 NavLink 项目它都可以正常工作)。
单击下一个 link - url 已更改但没有任何反应。
代码ServiceDescription.razor
@page "/service_description/{Id:int}"
@using Site.Data
@using Site.ViewModels
@inject StartUpService page
@if (service != null)
{
<div> <h3>Service Name - @service.Name</h3> - <h4>@service.Description</h4> </div>
}
@code
{
[Parameter]
public int Id { get; set; }
PageGlobal pageGlobal;
Service service;
protected override async Task OnInitializedAsync()
{
pageGlobal = await page.GetPageGlobalAsync();
service = pageGlobal.Person.Services.Where(e => e.Identifier == Id).FirstOrDefault();
}
}
如何使用 NavLink
功能使用新参数强制客户端重新加载 ServiceDescription.razor
?
此问题是由 OnInitializedAsync
引起的。对于OnInitializedAsync
,只有在组件准备启动时调用组件时才会调用。
如果你想根据参数改变service
,你应该像下面这样使用OnParametersSetAsync
:
protected override async Task OnParametersSetAsync()
{
pageGlobal = new PageGlobal
{
Person = new Person()
{
Services = new List<Service>(){
new Service{ Identifier = 1, Name = "Test1", Description = "D1" },
new Service{ Identifier = 2, Name = "Test2" , Description = "D2" },
new Service{ Identifier = 3, Name = "Test3", Description = "D3" }
}
}
};
service = pageGlobal.Person.Services.Where(e => e.Identifier == Id).FirstOrDefault();
}
您可以查看 ComponentBase
我创建了 NavLink
的列表,这只是它们之间的一个区别,动态参数 Id
<div>
@foreach (var service in pageGlobal.Person.Services)
{
var link = $"service_description/{service.Identifier}";
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="@link">
@service.Name
</NavLink>
</li>
</ul>
}
</div>
并且只有在我第一次点击时它才有效(无论是什么 NavLink 项目它都可以正常工作)。
单击下一个 link - url 已更改但没有任何反应。
代码ServiceDescription.razor
@page "/service_description/{Id:int}"
@using Site.Data
@using Site.ViewModels
@inject StartUpService page
@if (service != null)
{
<div> <h3>Service Name - @service.Name</h3> - <h4>@service.Description</h4> </div>
}
@code
{
[Parameter]
public int Id { get; set; }
PageGlobal pageGlobal;
Service service;
protected override async Task OnInitializedAsync()
{
pageGlobal = await page.GetPageGlobalAsync();
service = pageGlobal.Person.Services.Where(e => e.Identifier == Id).FirstOrDefault();
}
}
如何使用 NavLink
功能使用新参数强制客户端重新加载 ServiceDescription.razor
?
此问题是由 OnInitializedAsync
引起的。对于OnInitializedAsync
,只有在组件准备启动时调用组件时才会调用。
如果你想根据参数改变service
,你应该像下面这样使用OnParametersSetAsync
:
protected override async Task OnParametersSetAsync()
{
pageGlobal = new PageGlobal
{
Person = new Person()
{
Services = new List<Service>(){
new Service{ Identifier = 1, Name = "Test1", Description = "D1" },
new Service{ Identifier = 2, Name = "Test2" , Description = "D2" },
new Service{ Identifier = 3, Name = "Test3", Description = "D3" }
}
}
};
service = pageGlobal.Person.Services.Where(e => e.Identifier == Id).FirstOrDefault();
}
您可以查看 ComponentBase