剃须刀页面中的NavigationManager.NavigateTo有时无法使用c#

时间:2019-10-14 08:41:51

标签: c# .net-core blazor

关于asp.net核心和剃须刀页面,我有一个非常简单的问题。

在某些情况下,我想在c#剃须刀代码内部重定向到另一条路由。 如果之前有一个异步(等待)的Web服务调用,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);
    }
}

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

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

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

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

亲切的问候, -他。

3 个答案:

答案 0 :(得分:1)

另一种可能的解决方案是将<form @onsubmit="Cancel"><button type="submit">一起使用。这保留了表单的优点,例如回车键的处理。

答案 1 :(得分:1)

这里有点晚,但想在这里分享我的案例。对我来说,NavigationManager.NavigateTo() 不适用于某些目标 blazor 组件,即使它们是简单的组件,只有如下所示的 HTML 内容,其中没有任何 C# 代码。

@page "/unauthorized"

<h3>You are not authorized.</h3>

我注意到此处不起作用的组件的“构建操作”属性未设置为“内容”。因此,一旦我将此属性设为“内容”,它就开始工作了。

enter image description here

答案 2 :(得分:0)

错误现已修复。

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);
    }
}