Я изменил свой код выше, но все еще не работает
Я думаю, я понимаю, что вы хотите ... Ниже приведен код для достижения этой цели, при условии, что я прав ... Вы хотите обновить sh содержимое компонента NavMenu, встроенного в компонент MainLayout, со страницы входа, верно?
Вы можете использовать различные методы для достижения этой цели. Следующее решение основано на шаблоне состояния приложения.
Прежде всего, мы должны создать класс обслуживания, к которому можно получить доступ как из компонента NavMenu, так и из компонента Login. Вот класс:
public class AppState
{
private bool _loggedIn;
public event Action OnChange;
public bool LoggedIn
{
get { return _loggedIn; }
set {
if (_loggedIn != value)
{
_loggedIn = value;
NotifyStateChanged();
}
}
}
private void NotifyStateChanged() => OnChange?.Invoke();
}
Этот класс определяет делегат события с именем OnChange, который должен инкапсулировать метод, который будет обновлять sh NavMenu. Этот делегат вызывается при изменении значения логического свойства LoggedIn. Значение свойства LoggedIn может измениться на странице входа в систему, когда пользователь вошел в систему, поэтому любой подписчик этого делегата, в нашем случае NavMenu, будет уведомлен об этом.
Страница входа
@inject AppState AppState
Обратите внимание, что вышеизложенное вводит AppState на страницу входа. Поместите в верхнюю часть страницы
AppState.LoggedIn = true;
, этот код должен быть указан в конце процедуры входа в систему. Это инициирует запуск делегата OnChange.
компонент NavMenu
@inject AppState AppState
@implements IDisposable
*
protected override void OnInitialized()
{
AppState.OnChange += StateHasChanged;
}
public void Dispose()
{
AppState.OnChange -= StateHasChanged;
}
Теперь при каждом входе в систему служба AppState уведомляет компонент NavMenu о повторном рендеринге, чтобы ссылка для входа в систему не отображалась (не отображалась)
Класс стартапа
services.AddSingleton<AppState>();