Ich habe eine Entität namens Domain.Models.BlogPost
, die folgende Eigenschaften enthält:
Ich habe auch eine Entität namens Domain.Models.PostComment
, die folgende Eigenschaften enthält:
BlogPost
enthält viele PostComments
. Eine Eins-zu-viele-Beziehung.
Jetzt habe ich eine Ansicht wie diese (getrenntes Kommentarformular aus Blogpostcode über HTML-Kommentar):
%Vor% Da das Kommentarformular @Html.TextBox("Author")
und @Html.TextBox("Body")
verwendet, ist das Problem, dass sie mit Daten aus dem Modell gefüllt werden, die auch die Eigenschaften Author
und Body
enthalten. Irgendwelche Vorschläge, wie Sie das beheben können, damit diese Felder keine Werte erhalten, wenn die Seite geladen wird?
Ich habe auch versucht, ein BlogPostViewModel
zu erstellen und dieses als Modell der Ansicht festzulegen und die Eigenschaft BlogPost
mit meinem tatsächlichen Modell zu verknüpfen:
Dann habe ich @Html.TextBoxFor(x => x.NewComment.Author)
, aber wenn das Formular an diese Aktionsmethode gepostet:
postComment
hat nicht an die Formularwerte gebunden: /
Sie könnten die Felder im Abschnitt AddComment
entweder in Objekte umbenennen, die nicht mit den im Modell angegebenen Eigenschaften kollidieren, oder Sie können den Wert in der Ansicht mit einer anderen Überladung von Html.TextBox
Diese Überladung von TextBox
dauert ein value
:
value (Typ: System.Object)
Der Wert des Texteingabeelements. Wenn dieser Wert null ist, wird der Wert des Elements vom ViewDataDictionary-Objekt abgerufen. Wenn dort kein Wert vorhanden ist, wird der Wert vom ModelStateDictionary-Objekt abgerufen.
UPDATE: Da Sie "NewComment" als Eigenschaft hinzugefügt und die Kollision der Objektnamen aufgelöst haben, müssen Sie lediglich das Modell anweisen, um PostComment und nicht das gesamte Ansichtsmodell an POST zu binden Binder, dass ein Präfix verwendet wird. Dies geschieht mit BindAttribute
.
Gibt es keine Überladung auf TextBox
, die einen Wert annimmt? Sie könnten einfach string.Empty
...
Tags und Links asp.net-mvc asp.net-mvc-3 c# razor model-binding