刷新 Blazor 页面

MrJ*_*bin 20 c# blazor blazor-server-side

使用 .NET 6 的 Blazer 服务器端项目中,我位于以下页面:

\n

https://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}\n
Run 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)

  • 尝试:@MrJahanbin ` &lt;a href="" @onclick="@NevigateToYourUrl" @onclick:preventDefault /&gt;` (3认同)
  • 关闭。使其为“@onclick =”()=&gt; NevigateToYourUrl(“3620f82-7cba-473c-9273-1cf300a181eb”)“` (3认同)
  • 我的链接是 NavLink。&lt;NavLink href="@($"/Product/a3620f82-7cba-473c-9273-1cf300a181eb")"&gt;@Model.ProductName&lt;/NavLink&gt; (2认同)

小智 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 会绕过客户端路由并强制浏览器从服务器加载新页面。

相关文档