Blazor在.NET8中引入了在服务器上执行的选项(所谓的静态模式).它可以接受表格帖子,这很棒.但在那之后,我应该如何导航到另一个页面呢?如果我调用NavigationManager.NavigatoTo,则会得到Microsoft.AspNetCore.Components.NavigationException

有没有其他方法可以将用户重定向到另一个页面?

一些示例代码

namespace DemoBlazorWebApp.Client.Pages;

using DemoBlazorWebApp.Dtos;
using Microsoft.AspNetCore.Components;

public partial class ProductCreate
{
    [Inject]
    private NavigationManager NavigationManager { get; set; } = null!;

    [SupplyParameterFromForm]
    private ProductCreateDto Model { get; set; } = new();
    private bool IsSaving { get; set; }

    private async Task SubmitAsync()
    {
        IsSaving = true;

        try
        {
            ProductDto? product = await //save the product somehow

            NavigationManager.NavigateTo("/Products/" + product.ProductId);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            IsSaving = false;
        }
    }
}

@page "/Products/Create"

<h3>Product Create</h3>

@if (IsSaving)
{

    <p>
        Saving...
    </p>
}
else
{
    <EditForm FormName="ProductCreate" Model="@Model" OnValidSubmit="SubmitAsync">
        <DataAnnotationsValidator />
        <ValidationSummary />
        <p>
            <label>
                
            </label>
        </p>
        <p>
            <label>
                Name:
                <InputText @bind-Value="Model.Name" />
            </label>
        </p>
        <p>
            <label>
                Price:
                <InputNumber @bind-Value="Model.Price"></InputNumber>
            </label>
        </p>
        <p>
            <label>
                Description:
                <InputTextArea @bind-Value="Model.Description" />
            </label>
        </p>
        <button type="submit">Save</button>
    </EditForm>
}

请注意,托管页面的路径应采用新的默认静态模式(即未指定其他渲染模式),并且其中一条路径应使用新的Web应用程序脚本

推荐答案

在讨论和审查 comments 后,我们得出结论,问题在于try{} catch{}个区块.

因此,从try{}块中删除NavigationManager.NavigateTo("/Products/" + product.ProductId);行会产生不同.

捕获异常(无论如何都不会有什么坏处)会"吃掉"导航.老实说,我不明白为什么会这样.在OnInitializedAsync内的预呈现和导航也有类似的问题,但与.NET 8无关.我的任务是解开这一行为,并将带着洞察力返回.

Csharp相关问答推荐

需要更改哪些内容才能修复被覆盖的财产中的无效警告CS 8765?

在C#中使用in修饰符

获取ASP.NET核心身份认证cookie名称

有没有一种方法可以在包含混合文本的标签中嵌入超链接?

如何使用while循环实现异常处理

在FilePath中搜索一个词,并根据First Match从左到右提取文件路径

使用Audit.EntityFramework,我如何将外键的值设置为相关实体上的属性?

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

无法创建';';类型的';DbContext';.异常';无法解析类型';Microsoft.EntityFrameworkCore.DbContextOptions`1[Comm的服务

使用可信第三方的Iext8.Net pdf签名

N层解决方案上的依赖注入-删除样板

当使用Dapper映射DBNull时,我可以抛出异常吗?

异步等待Foreach循环中的ConfigureAWait(FALSE)执行什么操作?

Azure Functions v4中的Serilog控制台主题

未在Windows上运行的Maui项目

在平行内使用跨度.用于循环

Azure函数正在返回值列表,但该列表在Chrome中显示为空

如何在ASP.NET Core 8中获取键控服务词典

为什么INTEGER在通过反射调用时对空对象返回TRUE,而在INTEGER上调用时返回FALSE?

自定义ConsoleForMatter中的DI/Http上下文