2012-04-13 11 views
0

In einer neu geschriebenen Anwendung enthielt ein bestimmtes Formular ursprünglich eine Dropdownliste, in der der Benutzer eine der beiden Hauptoptionen für die Verwendung der Eingabe in anderen Berechnungen auswählte .ASP.NET MVC 2: Verwenden von doppelten Teilansichten ohne Duplikatvalidierung

Die Anforderungen diktieren jetzt, dass anstelle dieser Dropdown-Liste zwei ansonsten identische Formulare auf der gleichen Seite erscheinen sollen, die übereinander liegen. Ein Parameter oder ausgeblendeter Wert legt fest, ob die oben genannte Option für jedes der Formulare festgelegt wird, sodass für jede der beiden Optionen ein Formular vorhanden ist. Dies legt einen booleschen Wert für das Modell fest.

Ich verwende die gleiche Teilansicht für beide Erscheinungen des Formulars und definiert ihre Unterschiede während der Initialisierung. Allerdings habe ich immer noch ein bestimmtes Problem - wenn es einen Validierungsfehler in einem Formular gibt, erscheint es auf beiden. Was ist der beste Weg, dies zu verhindern?

Muss ich einfach nachgeben und fast doppelte Teilansichten machen, oder gibt es eine Möglichkeit, dieselbe zu verwenden?

Antwort

1

Man könnte so etwas wie dies versuchen:

Erstellen Sie ein Basismodell für das Formular. Das Basismodell wird die Eigenschaften und Validierung Attribute, die zu seinen beiden Kindern Modelle verfügbar sind:

public class BaseModel { 
    [Required] 
    public string Name { get; set; } 
} 
public class Model1 : BaseModel { 
    public bool Form1 { get; set; } 
} 
public class Model2 : BaseModel { 
    public bool Form2 { get; set; } 
} 

Sie können dann zwei verschiedene Controller-Aktionen erstellen, die diese Modelle als Parameter akzeptieren:

public ActionResult PostForm1(Model1 model) { } 
public ActionResult PostForm2(Model2 model) { } 

Und Ihre Teilansicht müßte ein Eingang, an den hinzufügen abhängig bilden ist:

<form action="<%=(isForm1 ? "/PostForm1" : "/PostForm2")>%"> 
    <input type="hidden" 
      id="<%=(isForm1 ? "Form1" : "Form2")%>" 
      name="<%=(isForm1 ? "Form1" : "Form2")%>" 
      value="true" /> 
</form> 

Wenn ein Formular geschrieben wird, sollte es nur Validierung tut auf seinem Modell und Lassen Sie das andere Modell unberührt (Sie benötigen ein Ansichtsmodell, das beide Formularmodelle als Eigenschaften hat).

Ich bin mir nicht sicher, ob irgendetwas davon funktionieren würde, aber, wiederum, es ist etwas, was du ausprobieren könntest.