Blazor Server Web Application Navigation mit Parametern?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Blazor Server Web Application Navigation mit Parametern?

Post by Anonymous »

Ich habe Blazor Server -Anwendung auf .net 8. Ich untersuche verschiedene Optionen für die Navigation in meiner Anwendung. Ich habe zwei Möglichkeiten implementiert - das Ändern der @body des Hauptlayout mit Navigationsmanager -Erweiterung für zusätzliche Daten oder Index. Meine Frage ist, welcher Weg für meinen Business Case besser ist und für eine öffentliche App, die von Hunderten und Tausend von Nutzern verwendet wird, besser ist. Was mich daran hindert, die Richtung der Navigationsmanager zu wählen, ist, dass ich Parameter nicht einfach an eine bestimmte Seite übergeben kann, auf die ich umleichte (wie Eingabeparameter). < /P>

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
Hier componentType ist die tatsächliche Rasierseite, die als Typ gegossen wurde, und ich kann den Navigationsmanager überspringen und den Komponententyp basierend auf dem Ergebnis des Bildschirms ändern. In meinem Index.razor.cs habe ich eine Funktion wie diese:

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
};
}
Und auf jeder Seite kann ich einfach in den Index ausgeben. Razor :

Code: Select all

[Parameter]
public Action NavigateRequest { get; set; }

public void RequestNavigate()
{
var args = new NavArgs()
{
CurrentStep = StepEnum.Login,
};
this.NavigateRequest.Invoke(args);
}
UPDATE 1 -- business case info:
My business case for the steps looks like this:
Steps:
  • Represent individual tasks within the wizard.
Each step:

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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post