Code: Select all
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
}
< /code>
Ich möchte in der Lage sein, mit unterschiedlichen Parametern zu Routen zu navigieren und den aktuellen Schritt zwischen den Bildschirmen zu speichern. Basierend auf dem Ergebnis des Bildschirms - Erfolg/Fehler
muss ich wissen, wo ich navigieren soll: Zum Beispiel zum Erfolg auf dem nächsten Funktionsbildschirm oder zum Navigieren navigieren zur Fehlerpage. So erstelle ich ein unterschiedliches Ansichtsmodell mit Eingabeparametern für jeden Bildschirm und um es mit Navigation zu übergeben? < /P>
Eine andere Idee, die ich untersuche, besteht darin
Code: Select all
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
};
}
Code: Select all
[Parameter]
public Action NavigateRequest { get; set; }
public void RequestNavigate()
{
var args = new NavArgs()
{
CurrentStep = StepEnum.Login,
};
this.NavigateRequest.Invoke(args);
}
My business case for the steps looks like this:
Steps:
- Represent individual tasks within the wizard.
kennt seine eigene Operation. < /li>
Kann den Erfolg oder Misserfolg seiner Operation bestimmen. /> Empfangsstufenname, Ergebnis und optionale Parameter. /> < /ul>
< /li>
< /ul>
< /li>
< /> Schrittdaten: < /p>
Ein Objekt (ähnlich wie bei MVC -Tempdata). Service. < /li>
< /ul>
Ich brauche kein Lesezeichen für den Schritt oder keine hackbare URL, um zwischen den Schritten zu springen. Ich möchte den zuletzt ausgeführten Schritt (Assistent -Fortschritt) in einer Datenbank bestehen und den Prozess wieder aufnehmen können, wenn der Prozess unterbrochen wird.>