Mit dem Entity Data Framework habe ich ein Modell namens Client
, das einfach eine ID und einen Namen enthält. Ich habe dann eine Assoziation mit einem anderen Modell namens Appointment
, das eine ID und ein Datum enthält.
Für das Formular möchte ich zulassen, dass Benutzer einen neuen Client erstellen und auf demselben Formular Termine hinzufügen (bevor der Client erstellt wird). Ich habe es teilweise funktioniert (Hinzufügen eines Termins).
In der Steuerung:
%Vor%In der Ansicht:
%Vor%'Teilansicht':
%Vor%Dies ist jedoch aus mehreren Gründen nicht ideal:
Comments
in Client
und Appointment
table), da bei den Feldnamen keine Präfixierung erfolgt, wodurch auch mehr als ein Termin verhindert wird hinzugefügt auch Was kann ich tun, damit mehrere Termine hinzugefügt werden können, d. h. die Verwendung einer Schaltfläche zum Rendern einer Teilansicht (wahrscheinlich mit AJAX) auf der Seite, wenn auf "Neuer Termin" geklickt wird, um so viele Termine wie möglich zuzulassen? Ich möchte auch, dass dies eine gemeinsame Ansicht ist, die sowohl zum Erstellen und Bearbeiten von Datensätzen als auch zum Hinzufügen / Löschen von Terminen im selben Formular verwendet werden kann.
Aktualisieren
Etwas Fortschritt mit einem ViewModel:
Controller:
%Vor% Anzeigen (für Termine funktioniert nicht mit einer foreach
-Schleife, da jedem der Termine das Präfix Appointment_
anstatt Appointment[0]_
vorangestellt ist):
Dies ist in Ordnung, um Termine für einen neuen Kunden zu erstellen, aber was ist mit der Bearbeitung dieser Termine sowie dem Hinzufügen neuer Termine, ohne das Formular zurückzusenden? Zum Hinzufügen eines Links, der ein neues Terminformular unter dem vorhandenen anzeigt, mit einem anderen zu löschenden Link (aus der Ansicht ausblenden und einen versteckten Feldwert festlegen).
Update 2
Funktioniert, um Termine beim ersten Erstellen eines Clients hinzuzufügen. Ich bin mir jedoch nicht sicher, wie ich bestehende Termine aktualisieren kann (ohne sie alle zu löschen und neu hinzuzufügen).
Im Controller:
%Vor%Anzeigen:
%Vor%Nur einige Ideen herumschweben ..
Wie wäre es, wenn Sie die Teilansicht Termin in ein Formular einfügen?
Verwenden Sie jQuery / AJAX, um die Übergabe des Formulars zu verarbeiten:
%Vor%Dies würde den stark typisierten Termin zur folgenden Aktionsmethode senden:
%Vor%Im Grunde senden Sie das Formular mit AJAX und rendern dann das Ergebnis wieder in das partielle. Das Ergebnis ähnelt dem AJAX UpdatePanel (von WebForms-Ruhm).
Sie würden also die Details ausfüllen, auf "Absenden" klicken, die Details werden auf dem Controller (mit AJAX) veröffentlicht, dann wäre das Formular wieder leer, so dass Sie Termine hinzufügen können.
Würde das funktionieren?
Es gibt einige Blogposts, in denen erklärt wird, wie die Modellbindung mit einer Liste komplexer Elemente funktioniert. Ihr Ansichtsmodell-Ansatz sollte funktionieren. Wenn Sie einen neuen Termin hinzufügen möchten, fügen Sie einfach einen neuen Eintrag zur Liste der Termine (viewmodel) auf der Client-Seite mit einem JS-Code hinzu.
Gehen Sie durch diese Links, die erklären, wie die Out-of-Box-MVC-Modellbindung funktionieren würde, wenn Sie den HTML-Code richtig rendern
Tags und Links asp.net-mvc entity-framework