2013-06-18 11 views
5

Ich habe ein Projekt mit ASP.Net MVC & EF5. Das Modell verfügt über eine ausreichend große Anzahl von Feldern, sodass die App mehrere Seiten benötigt, um alle Daten zu erfassen.Best Practice für eine mehrseitige/form mvc web app

Sobald die Daten erfasst sind, wird sie an einen Web Service/WebAPI gesendet. (Dies kann nicht geändert werden oder ich würde stattdessen EF-Entities verwenden).

Was ist der beste praktische oder beste Vorschlag, um das Datenmodell von Seite zu Seite beizubehalten, wenn es gefüllt ist?

+1

Lassen Sie mich nur darauf hinweisen, gibt es ein Projekt Seide (Teil einer Muster und Praktiken) verfügbar unter http://silk.codeplex.com/ –

Antwort

9

Sie könnten eine ViewModel-Klasse erstellen, die jede Seite verwendet (stark typisierte Ansicht) und nur die Felder speichern, die nicht in ausgeblendeten Feldern bearbeitet werden. Ihr Controller verfügt über eine Aktionsmethode und Ansicht für jeden Schritt. Wenn jeder Schritt übergeben wurde, geben Sie die Ansicht (zusammen mit dem Ansichtsmodell) für den nächsten Schritt zurück.

Auf der letzten Seite reichen Sie das View Model ein und speichern es.

Contoller Code:

[HttpPost] 
public ActionResult Step1(MyBigViewModel model) 
{ 
    //do work 
    return View("Step2", model); 
} 

[HttpPost]  
public ActionResult Step2(MyBigViewModel model) 
{ 
    //do work 
    return View("Step3", model); 
} 

[HttpPost] 
public ActionResult Step3(MyBigViewModel model) 
{ 
    //save here 
    return View("Success", model); 
} 

Eine weitere Option ist ein "Wizard-ähnliche" UI auf einer einzigen Seite zu verwenden. Hier ist ein ich verwendet habe, bevor sie mit Erfolg:

https://github.com/mstratman/jQuery-Smart-Wizard

+0

Hallo @Rob, Dies ist vor ein paar Monaten, aber ich konnte nicht bekommen deine erste Antwort oben, um zu arbeiten. Jedes Mal, wenn das Formular in der Ansicht "Step2" übergeben wird, kehrt es zur HttpPost-Methode für Step1 zurück. Die URL bleibt als {Controller} \ Step1. –

+0

ist dies ein anerkanntes Designmuster? Ist es nicht ein bisschen komisch? Ist es die beste Praxis? – niico

9

Frage - 1

Warum kann ich nicht verwenden, die Domain Model direkt mit Blick interagieren oder Warum kann ich nicht erstellen a View Model und alle Properties von Domain-Model?

Antwort

Angenommen, Sie 50 Felder in der Klasse haben. Ich habe implementiert Daten Anmerkungen so Erforderliche Felder sind ebenfalls vorhanden. OK. Ich bin in Schritt 1. Ich habe das Formular eingereicht. Meine Post Aktion Methode sagte, Form kann nicht eingereicht werden !!!! Warum???

Es ist, weil es einige Erforderliche Felder sind, die nicht der Teil von Schritt 1 sind. Ich habe eine Frage von Ihnen. Willst du alle Properties als Erwähnung in anderer Antwort behalten? Wenn Sie alle Eigenschaften in einem View-Model hinzufügen möchten, dann warum interagieren Sie mit Domain-Modell direkt nach dem Vorschlag in anderen Antwort zur Verfügung gestellt? Daher ist es am schlimmsten, alle Eigenschaften in einem Ansichtsmodell hinzuzufügen. Recht?

Frage - 2

Was ist die beste practive oder bester Vorschlag für die Daten Modell von Seite zu Seite persistierenden wie es gefüllt ist?

Antwort

1. Use View Models with necessary properties only(that are required for 
    particular Step.). So there can be many View Models on the basis of 
    your Steps. This process will be very useful in long run 
2. Use AutoMapper to populate the info required for View Model from Domain Model. 

Strongly Types View Models verwenden, sobald die Daten zu Post Action Method nach dann gesendet wird sich nach meinem Wissen Sie TempData speichern die gebuchten Daten verwenden können. Es ist wie ein DataReader Class, einmal gelesen, Daten werden verloren gehen. Damit werden die gespeicherten Daten in TempData nach dem Lesen null.

var Value = TempData["keyName"] //Once read data will be lost 

Frage - 3

Das Modell hat eine ausreichend große Anzahl von Feldern, die die App mehrere Seiten benötigt, um alle Daten zu sammeln.

Antwort

So die Daten bestehen bleiben, auch nachdem die Daten gelesen werden, können Sie Alive es wie unten

var Value = TempData["keyName"]; 
TempData.Keep();     //Data will not be lost for all Keys 
TempData.Keep("keyName");   //Data will not be lost for this Key 

Frage - 4

How will you handle the case when you have both Next and Previous Buttons? 

Antwort

TempData Werke in neuen Tabs /Windows- auch, wie Session Variable tut.

Sie Session Variable nutzen könnten auch Sie sind in der Lage, die Daten über Controller/Bereich zu halten, als auch

Hope this Post helfen Ihnen sehr.

Verwandte Themen