首页 > 解决方案 > 代码中的 Blazor NavigationManager NullReference 错误

问题描述

在 VS19 Professional 中使用 Blazor 当我尝试从 .razor.cs 文件后面的代码中使用 NavigationManager.NavigateTo 函数时,我遇到了 NullReference 异常。

我首先在 .razor.cs 文件的顶部注入 NaviagtionManager:

[Inject]
protected NavigationManager NavigationManager { get; set; }

然后当用户单击提交按钮时,数据被保存到 SQL 数据库(这部分工作正常),然后页面应该重定向到另一个页面,但由于“NavigationManager.get 返回 null”错误而失败。

这是保存数据并调用 NavigationManager 的函数:

public void Update() {

        participants p = new participants {
            ID = Convert.ToInt32(id),
            FirstName = participant[0].FirstName,
            LastName = participant[0].LastName,
            Eating = participant[0].Eating,
            Bowling = participant[0].Bowling,
            EscapeRoom = participant[0].EscapeRoom
        };

        this.Db.UpdateParticipant(p);
        NavigationManager.NavigateTo("Bowling/2020");
    }

我一直无法在网上找到任何东西来帮助我解决这个问题。

有谁知道如何解决这个问题?

更新更多代码:

在 .razor 页面上,我有一个 EditForm,它在提交时调用 Update():

<EditForm Model="@participant" OnValidSubmit="@Update">

在 .razor.cs 页面上,这是 Update() 函数:

public void Update() {

        participants p = new participants {
            ID = Convert.ToInt32(id),
            FirstName = participant[0].FirstName,
            LastName = participant[0].LastName,
            Eating = participant[0].Eating,
            Bowling = participant[0].Bowling,
            EscapeRoom = participant[0].EscapeRoom
        };

        this.Db.UpdateParticipant(p);
        NavigationManager.NavigateTo("/Bowling/2020/");
    }

数据库中的值得到正确更新。

更新:

发现问题,请看下面的回复。

标签: blazor

解决方案


这是“不要在代码示例中留下任何内容”的明显案例。

在我的代码中,我有这个:

[Inject]
protected BowlingData Db { get; set; }
protected NavigationManager NavigationManager { get; set; }

(作为 Blazor 的新手,我认为 [Inject] 将包括它后面的所有内容,直到我的 [Parameters] 位于此代码片段下方。

当我发布问题时,我删除了

protected BowlingData Db {get; set;} 

行以最小化示例代码的数量。如果我没有这样做,我相信我的问题会马上得到回答。

一旦我添加了第二个 [inject] 我的代码就可以正常工作:

[Inject]
protected BowlingData Db { get; set; }
[Inject]
protected NavigationManager NavigationManager { get; set; }

经验教训 - 关于 Blazor 和发布问题 :)


推荐阅读