Stellen Sie sich folgende Situation vor: Ich möchte den Benutzer eine Auszahlung machen lassen. Wenn es gelingt, sollte ich ihn zur Aktion namens Index
von HomeController
umleiten. Wenn dies nicht der Fall ist (z. B. der Kontostand ist geringer als die Abhebungssumme), möchte ich einen validierungsbasierten Fehler anzeigen.mvc, ajax und umleiten auf Seite
Jetzt kann ich keine geeignete Validierungsregel während der Projektphase angeben (da es keine statische Regel wie Required
ist, ändert sich der Saldo die ganze Zeit), also bin ich gezwungen, einige Laufzeitüberprüfungen beim Benutzer durchzuführen. Das ist in Ordnung, aber jetzt habe ich mich gefragt, ob es in diesem Fall möglich ist, die Seite nicht nach dem Beitrag zurückzuschicken.
Daher habe ich versucht @using(Ajax.BeginForm(...){}
und in der Controller-App konnte ich die Benutzereingabe überprüfen. Wenn dies falsch ist, könnte ich den Fehler zum Modell hinzufügen (allgemein oder zu einer bestimmten Eigenschaft) und eine Teilansicht einschließlich dieses Fehlers zurückgeben, die kein Zurücksetzen der Seite verursacht. Dies macht das gleiche Verhalten wie die Standard-jQuery-Validierung, aber natürlich stoppt es Post-Back nicht und zeigt nur eine aktualisierte Teilansicht an.
Das Problem ist, wenn die Eingabe korrekt ist - dann RedirectToAction("Index", "Home")
macht die Generierung der Index.cshtml
als Teilansicht (so Kopfzeile und Fußzeile meines Layouts in diesem Fall verdoppelt) und das ist verständlich, da es Stil AJAX-Anfrage ist.
Nun, meine Frage ist - vor allem, ist meine Überlegungen überhaupt notwendig? Ich meine, ich dachte nur, dass das Zurückstellen in diesem Fall nicht benutzerfreundlicher sein könnte. Und wenn ja, gibt es einen anderen Ansatz, den ich in diesem Fall anwenden könnte? Ich brauche Daten aus dem gegebenen Kontext (wie Datenbank), dann kann ich nicht einfach das Postback auf der Client-Seite stoppen.
Ein bisschen unklar, was Sie tun möchten. Wenn Sie letztendlich umleiten möchten, führen Sie eine normale Übermittlung durch. Fügen Sie im Controller eine bedingte Überprüfung hinzu und, falls nicht gültig, fügen Sie einen 'ModelStateError' hinzu und geben Sie die Ansicht zurück, so dass der Fehler angezeigt wird (obwohl Sie immer ein eigenes bedingtes Validierungsattribut erstellen können, damit Sie die clientseitige Validierung erhalten oder ein' RemoteAttribute 'verwenden ') –
Ist es akzeptabel, mit Client-Skript (Javascript) umleiten, nach dem Post? – smoksnes