Erstellen Sie MVC3 CheckBoxFor aus ListT und holen Sie die Liste (mit aktualisierten Werten) auf Post zurück

8

Ich habe eine Liste in meinem ViewModel Ich analysiere die View

%Vor%

BoolSetting:

%Vor%

Ich möchte dann ein Kontrollkästchen für alle Elemente in meiner Liste drucken, also befindet sich die Liste im ViewModel, das die Ansicht verwendet

%Vor%

Das Problem ist, wenn ich dies poste, dann habe mein Modell die aktualisierten Einstellungen (die Bool-Werte) nicht in der Liste in meinem ViewModel gespeichert und daher ist das Objekt leer.

Ich könnte

machen %Vor%

Aber dieses Viewmodel wird viele Listen haben und einige von ihnen werden die gleichen Namen haben! Das verursacht Konflikte

Gibt es also eine Möglichkeit, alle meine Boole zu drucken und MVC dann dazu zu bringen, die Daten wieder in das List-Objekt zu schreiben? Ich kann CheckBoxFor nicht benutzen, um zu arbeiten, weil es einen Ausdruck will, und ich kann einen Weg nicht finden, durch meine Liste auf diese Weise zu iterieren

Kann ich es vielleicht mit Templates beheben, indem ich eine Vorlage für BoolSetting mache und vielleicht List?

    
Mech0z 02.12.2011, 13:03
quelle

1 Antwort

18

Beginnen Sie mit der Korrektur Ihres Ansichtsmodells und dem Entfernen des benutzerdefinierten Konstruktors oder des Standardmodellbinders können Sie ihn nicht instanziieren, und Sie müssen benutzerdefinierte Modellbinder und andere Dinge schreiben:

%Vor%

Schreiben Sie anschließend eine Controller-Aktion, die Ihr Ansichtsmodell auffüllt:

%Vor%

dann eine Ansicht ( ~/Views/Home/Index.cshtml ), in der Sie einfach Editor-Vorlagen verwenden und keine foreach -Schleifen oder schwach typisierte HTML-Helfer wie Html.CheckBox schreiben. Durch die Verwendung von Editor-Templates stellen Sie sicher, dass alle Eingabefelder korrekte Namen haben, damit der Standard-Modellbinder seine Werte während des Postbacks in das View-Modell holen kann:

%Vor%

und schließlich die entsprechende Editor-Vorlage für das View-Modell, die für jedes Element der Collection gerendert wird ( ~/Views/Home/EditorTemplates/BoolSetting.cshtml ):

%Vor%     
Darin Dimitrov 02.12.2011, 13:52
quelle

Tags und Links