Ich stimme TokenMacGuy zu, aber manchmal kann das nicht lebensfähig sein.
In diesem Fall müssen Sie benutzerdefinierte Klassen in Ihrem Controller erstellen, an den Ihre Ansicht gebunden werden kann. Wenn Sie die Seite dann übergeben, können Sie mit UpdateModel die Werte abrufen und zu einer anderen Aktion umleiten, wobei entweder das Modell erneut übergeben wird, um weitere Details einzugeben, oder ein neues Modell für diese Ansicht.
Nehmen wir an, Sie haben einen zweiseitigen Assistenten. Beide Ansichten erben von <MyApp.Controllers.Wizard>
.
In Ihrem Controller haben Sie einen Klassenassistenten, der so aussehen kann;
public class Wizard
{
string FirstName {get;set;}
string LastName {get;set;}
string eMail {get;set;}
}
E-Mail wird in Schritt 2 Ihres Assistenten erfasst.
In Schritt 1 haben Sie zwei Felder Namen Vornamen und Nachnamen und auf dem Postbacks Sie einfach Updatemodel (Wizard Objekt) verwenden, um die Werte zu erhalten.
Dieses Modell hat jetzt ein Problem hat, dass Sie benötigen um das gesamte Modell an Ansicht 2 zu übergeben, einschließlich der Daten, die nicht aus Ansicht 1 benötigt werden. Auf der Rückseite von Ansicht 2 führen Sie dann UpdateModel (Wizard-Objekt) erneut aus, um die ersten 2 Felder und dann die E-Mail zu erhalten.
Vorname und Nachname in der 2. Ansicht möglicherweise in ausgeblendeten Feldern.
Das ist 1 Weg und wirklich nicht die beste, jetzt, dass ich es auf dem Bildschirm sehe. Sie könnten jeden Schritt in einem Statusdienst speichern, damit Sie nicht jedes Mal die Daten zurückgeben, die sie sauberer machen würden.
JamesShannon Idee ist auch großartig. Assistenten sind so veraltet, ich denke, es sei denn, Sie sind in einem Online-Kauf-Szenario.
Sie können JavaScript verwenden, um Elemente des Assistenten auszublenden und anzuzeigen, sodass sich alle Eingabefelder auf derselben Seite befinden. Dies kann sehr effektiv sein, wenn Sie eine Scroll-Animation haben, um den nächsten Abschnitt zu öffnen, wenn Sie den vorherigen Abschnitt abgeschlossen haben. < = hoffe das macht Sinn.
<script src="/Scripts/jquery-1.3.2.js"></script>
<script>
$(document).ready(function() {
$("#addComment").click(function() {
if ($("#divStep2").is(':visible')) {
$("#divStep2").slideUp(300);
} else {
$("#divStep2").slideDown(300);
}
});
});
</script>
Der obige Code aktiviert die Animation eines geöffneten und geschlossenen Bereichs, wenn Sie darauf klicken. Dies erfordert natürlich, dass JS auf dem Client-Rechner aktiv ist, also möchten Sie vielleicht, dass alle Abschnitte standardmäßig geöffnet sind, und dann JS verwenden, um sie beim Seiteneintrag zu schließen.
Wenn Sie das tun, dann wenn der Benutzer JS hat, werden sie nette Animationen sehen und wenn nicht, dann werden sie wenigstens alle Abschnitte sehen und das Leben wird gut sein.
JS wäre der beste Ansatz, den ich denke, da Sie keine irrelevanten Daten an jede Ansicht weitergeben müssen und keine Daten an einen Zustandsdienst speichern müssen, den Sie bereinigen müssen, wenn Leute einfach klicken weg von deiner Seite 1/2 Weg durch.
Hoffe, das hilft.
Wollen Sie um es mit 'a' Tag-Links oder Formular (wahrscheinlich wählen) Elemente zu tun? – Charlino
Können Sie bitte den Unterschied bei der Verwendung der "a" -Tag-Links oder -Formulare erklären. – Picflight