Навигация по веб-приложению Blazor Server с параметрами?C#

Место общения программистов C#
Anonymous
Навигация по веб-приложению Blazor Server с параметрами?

Сообщение Anonymous »

У меня есть серверное приложение Blazor в .Net 8. Я изучаю различные варианты навигации внутри своего приложения. Я реализовал это двумя способами - изменив @Body MainLayout с расширением диспетчера навигации для дополнительных данных вокруг него или Index.razor, который является оболочкой для динамического компонента, а внутри динамического я изменю страницы по типу.
Ниже приведены две реализации. Мой вопрос в том, какой путь лучше для моего бизнес-кейса и более прямой для общедоступного приложения, которым будут пользоваться сотни и тысячи пользователей. Что мешает мне выбрать направление диспетчера навигации, так это то, что я не могу легко передать параметры на определенную страницу, на которую я перенаправляюсь (например, входные параметры).
public class NavigationProvider
{
private readonly NavigationManager _navigationManager;

public NavigationProvider(NavigationManager navigationManager)
{
_navigationManager = navigationManager;
}

public StepEnum CurrentStep { get; private set; } = Step.Undefined;

public Dictionary PassedParameters { get; private set; }

public void NavigateTo(OutcomeEnum outcome, Dictionary passedParameters)
{
this.PassedParameters = passedParameters;

StepEnum nextStep = ChooseNextStep(outcome);

this.Navigate(nextStep);
}

private StepEnum ChooseNextStep(OutcomeEnum outcome)
{
StepEnum nextStep = StepEnum.Undefined;

switch (CurrentStep)
{
case StepEnum.Login:
nextStep = StepEnum.Dashboard;
break;
case StepEnum.Dashboard:
nextStep = StepEnum.ExecuteAction;
break;
case StepEnum.ExecuteAction:
nextStep = StepEnum.EndOfUserAction;
break;
default:
nextStep = StepEnum.ErrorPage;
break;
}

return nextStep;
}

private void Navigate(StepEnum nextStep)
{
_navigationManager.NavigateTo(nextStep.ToString());
}
}

public enum OutcomeEnum
{
ErrorInBusinessLogic,
SuccessfulRedirect
}

public enum StepEnum
{
Login,
Dashboard,
ExecuteAction,
EndOfActionExecute,
ErrorPage
}

Я хочу иметь возможность переходить к маршрутам с разным набором параметров и сохранять текущий шаг между экранами. Также на основе результата экрана — успех/ошибка
Я должен знать, куда двигаться: например, в случае успеха на следующем функциональном экране или в случае ошибки перейти на страницу ошибок.
Это способ навигации внутри серверного приложения blazor? Как создать другую модель представления с входными параметрами для каждого экрана и передать ее с помощью навигации?
Еще одна идея, которую я изучаю, — создать оболочку Index.razor для динамического компонента следующим образом:< /p>


Здесь ComponentType — это фактическая страница бритвы, преобразованная в тип, и я могу пропустить диспетчер навигации и просто изменить тип компонента в зависимости от результата на экране. Внутри моего index.razor.cs у меня будет такая функция:
public Type ComponentType { get; set; } = typeof(Login);

public Dictionary ComponentParameters { get; set; }

protected override void OnInitialized()
{
this.ComponentParameters = new Dictionary
{
{ "NavigateRequest", new Action(HandleNavigateRequest) }
};

base.OnInitialized();
}

public void HandleNavigateRequest(NavArgs args)
{
this.ComponentType = args.CurrentStep switch
{
StepEnum.Registration => typeof(Dashboard),
StepEnum.Dashboard=> typeof(ExecuteAction),
StepEnum.ExecuteAction=> typeof(EndOfActionExecute),
_ => this.ComponentType // default case, keeps the current ComponentType unchanged
};
}

и на каждой странице я могу просто отправить index.razor:
[Parameter]
public Action NavigateRequest { get; set; }

public void RequestNavigate()
{
var args = new NavArgs()
{
CurrentStep = StepEnum.Login,
};
this.NavigateRequest.Invoke(args);
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... parameters

Вернуться в «C#»