MrJ*_*bin 20 c# blazor blazor-server-side
在使用 .NET 6 的 Blazer 服务器端项目中,我位于以下页面:
\nhttps://localhost:7252/Product/a3620f82-7cba-473c-9273-1cf300a181eb
\n我在此页面上有一个导航链接,它指向上面完全相同的 URL。但是当我点击该方法时,页面没有任何反应,也没有刷新或更新。我应该怎么办?
\n我的代码示例:
\n@page "/Product/{Id:guid}"\n@using Application.ProductGalleries.Queries\n@using Application.Products.Queries\n@using ViewModels.ProductVariants\n@using ViewModels.ProductVariantsDetails\n@using ViewModels.Products\n<div class="col-12 px-0">\n <h1>\n <NavLink href="@($"/Product/a3620f82-7cba-473c-9273-1cf300a181eb")">@Model.ProductName</NavLink>\n </h1>\n <p>\xd8\xaf\xd8\xb3\xd8\xaa\xd9\x87 \xd8\xa8\xd9\x86\xd8\xaf\xdb\x8c : @Model.CategoryName<span> \xd8\xa8\xd8\xb1\xd9\x86\xd8\xaf: @Model.BrandName</span></p>\n <nav aria-label="breadcrumb">\n <ol class="breadcrumb">\n <li class="breadcrumb-item"><NavLink href="/">\xd8\xb5\xd9\x81\xd8\xad\xd9\x87 \xd9\x86\xd8\xae\xd8\xb3\xd8\xaa</NavLink></li>\n <li class="breadcrumb-item"><NavLink href="/Products">@Model.CategoryName</NavLink></li>\n <li class="breadcrumb-item active" aria-current="page">@Model.BrandName</li>\n </ol>\n </nav>\n </div>\n\n\n@code {\n[Parameter]\npublic Guid Id { get; set; }\nprotected override Task OnParametersSetAsync()\n{\n return base.OnParametersSetAsync();\n}\nprotected override Task OnAfterRenderAsync(bool firstRender)\n{\n return base.OnAfterRenderAsync(firstRender);\n}\n\nprotected override bool ShouldRender()\n{\n return base.ShouldRender();\n}\nprotected override void OnAfterRender(bool firstRender)\n{\n base.OnAfterRender(firstRender);\n}\nprotected override void OnInitialized()\n{\n base.OnInitialized();\n}\n\nprotected override void OnParametersSet()\n{\n base.OnParametersSet();\n}\n\npublic override Task SetParametersAsync(ParameterView parameters)\n{\n return base.SetParametersAsync(parameters);\n}\nprotected async override Task OnInitializedAsync()\n{\n var request = new GetProductByIdQuery() { ProductId = Id };\n\n var product = await Mediator.Send(request: request);\n if (product.Value != null)\n {\n Model = product.Value;\n GalleryModel = await GetGallery();\n\n }\n}\n}\nRun Code Online (Sandbox Code Playgroud)\n在搜索过程中,如果用户搜索过香蕉并且在搜索页面上并想要再次搜索香蕉,则该页面将不会显示任何反应。\n我经历了所有生命周期覆盖以查看它的去向,但它没有反应。
\n我还想到使用StateHasChanged ()。但我的代码是一个NavLink,当项目没有进入生命周期时,我应该把这段代码放在哪里?
\n小智 16
您实际上需要使用强制负载导航到当前的 Uri。我为此使用简单的扩展方法
public static void ReloadPage(this NavigationManager manager)
{
manager.NavigateTo(manager.Uri, true);
}
Run Code Online (Sandbox Code Playgroud)
Ali*_*deh 10
尝试以下代码:
@code {
void NevigateToYourUrl()
{
_navigationManager.NavigateTo("YourPagePath");
}
}
Run Code Online (Sandbox Code Playgroud)
并且您还需要注入 NavigationManager,如下所示:
@inject NavigationManager _navigationManager
Run Code Online (Sandbox Code Playgroud)
尝试:
<a href="" @onclick="@NevigateToYourUrl" @onclick:preventDefault />
Run Code Online (Sandbox Code Playgroud)
小智 6
以 AliNajafZadeh 的回答为基础:
@inject NavigationManager _navigationManager
...
<a href="" @onclick="@NevigateToYourUrl" @onclick:preventDefault />
...
@code
{
void NevigateToYourUrl()
{
_navigationManager.NavigateTo("YourPagePath", true);
}
}
Run Code Online (Sandbox Code Playgroud)
将第二个参数设置为 true 会绕过客户端路由并强制浏览器从服务器加载新页面。