2016-04-21 14 views
1

Ich bin ein wenig neu in MVC und habe Schwierigkeiten, verschachtelten Viewmodels Werte/Daten zuzuweisen. Wenn ich die Anwendung starte, zeigt die verschachtelte Ansicht keinen Inhalt, aber wenn ich den Controller debugge, werden die Werte gesetzt. Müssen verschachtelte Viewmodels in einem Konstruktor im Hauptdarstellungsmodell instanziiert werden? Wie?Wert dem verschachtelten Viewmodel zuweisen

Ich habe es mit Modellen anstelle von Viewmodels arbeiten, aber ich musste einige Validierung hinzufügen.

Beispiel:

public class MainViewModel 
{ 
public NestedViewModel NestedViewModel { get; set; } 
} 
public class NestedViewModel 
{ 
public string Name {get; set;} 
} 

Und in der Steuerung:

public ActionResult Main() 
{ 
var mvm = new MainViewModel(); 
mvm.NestedViewModel = new NestedViewModel(); 
mvm.NestedViewModel.Name = data.Name.ToString(); 
return View(mvm); 
} 

Und in der Ansicht:

@model WEB.Models.MainViewModel 
@{Html.RenderPartial("_NestedView", Model.NestedViewModel);} 

und verschachtelte Ansicht:

@model WEB.Models.MainViewModel 
@Html.TextBoxFor(model => model.NestedViewModel.Name) 

Das Textfeld hat keinen Inhalt, während der Controller hat.

+1

Ihr nicht das Modell der Ansicht Rückkehr - 'return View (MVM),' (und Sie haben nicht den Wert von 'NestedViewModel' so eingestellt, dass der Code, den Sie auf jeden Fall eine Ausnahme werfen würde gezeigt haben) –

+0

Stephen ist richtig, der Compiler würde nicht zulassen, dass Sie dieses Beispiel erstellen. Für das Modell-Problem wird in der verschachtelten Ansicht "MainViewModel" verwendet, in RenderPartial geben Sie jedoch NestedViewModel als Parameter an. Dann verwenden Sie es als MainViewModel in der TextBoxFor -Funktion ... Entweder geben Sie ein MainViewModel als Parameter oder ändern Sie die Verwendung in Ihrer verschachtelten Ansicht und verwenden Sie den Parameter als NestedViewModel –

+0

Ihre Bearbeitung hat einige Probleme behoben, wird aber dennoch eine Ausnahme auslösen. Ihr Teil erwartet 'MainViewModel', aber Sie übergeben es' NestedViewModel' –

Antwort

1
@model WEB.Models.MainViewModel 
@Html.TextBoxFor(model => model.NestedViewModel.Name) 

//should be 

@model WEB.Models.NestedViewModel 
@Html.TextBoxFor(model => model.Name) 
+0

Danke! Dies löste es für mich ... Immer noch lernen, wie ich gehe :) – user3082768

+0

Kein Problem, viel Glück mit dem Projekt! –

Verwandte Themen