NavigationManager.NavigateTo in razor pages c# 有时不起作用

Hei*_*gan 3 c# .net-core blazor

我有一个关于 asp.net core 和 razor 页面的非常简单的问题。

在 c# razor 代码中,我想在某些情况下重定向到另一条路线。如果之前有一个异步(等待)webservice 调用,NavigationManager.NavigateTo 不能正常工作,但也不会抛出异常。

async Task Cancel()
{
    var authState = await authenticationStateTask;
    var user = authState.User;
    if (user.Identity.IsAuthenticated){           
       // if there's some async webservice call action here, 
       // NavigationManager.NavigateTo does neither work nor an exception is thrown
       NavigationManager.NavigateTo("/Project", true);
    }
}
Run Code Online (Sandbox Code Playgroud)

你知道可能是什么原因吗?

NavigationManager.NavigateTo的替代方法是什么?

PS请不要以那种方式提出Response.Redirect(因为,这不适合我)。

var context = new Microsoft.AspNetCore.Http.HttpContextAccessor();
context.HttpContext.Response.Redirect("/Project", true)
Run Code Online (Sandbox Code Playgroud)

亲切的问候,-他。

Hei*_*gan 5

现在已经修复了错误。

NavigationManager.NavigateTo(...)的问题仅发生了,因为我在 Razor 页面的发布表单中使用了一个按钮。用 div 替换了表单标签,现在一切正常。

亲切的问候,-他

<div>
<p>
    <label>Project name: @projectName</label>
</p>
<p>
    <!-- [...] -->
    <span class="btn-cancel">
        <button class="btn-primary" @onclick="@(async () => await Cancel())">Cancel</button>
    </span>
</p></div>

@code {
    // ...
    async Task Cancel()
    {
        // here're other async action calls
        NavigationManager.NavigateTo("/Project", true);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我修复了你的标签。这是 Razor 组件,而不是 Razor 页面。非常不同的事情。 (2认同)