Blazor NavigationManager NullReference ошибка в коде позади - PullRequest
0 голосов
/ 17 февраля 2020

Использование Blazor в VS19 Professional Я получаю исключение NullReference, когда пытаюсь использовать функцию NavigationManager.NavigateTo из кода файла .razor.cs.

Сначала я внедряю NaviagtionManager вверху файл .razor.cs:

[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/");
    }

Значения в базе данных получить обновлено правильно.

ОБНОВЛЕНИЕ:

Обнаружена проблема, см. ответ ниже.

1 Ответ

1 голос
/ 17 февраля 2020

Это был явный случай "не исключайте ничего из вашего примера кода".

В моем коде у меня было следующее:

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

(Будучи новичком в Blazor, Я подумал, что [Inject] будет включать в себя все, что следует за ним до тех пор, пока мои [Параметры] не будут под этим фрагментом кода.

Когда я отправил вопрос, я удалил строку

protected BowlingData Db {get; set;} 

, чтобы свести к минимуму количество примера кода. Если бы я этого не сделал, я уверен, что на мой вопрос ответили бы сразу.

Как только я добавил второй [inject], мой код заработал как надо:

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

Извлеченные уроки - как о Blazor, так и о публикации вопросов :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...