Frage

Ich habe eine starke Typ Ansicht vom Typ

List<List<MyViewModelClass>>

Die äußere Liste wird immer zwei Listen von List<MyViewModelClass> haben. Für jede der beiden äußeren Listen möchte ich eine Gruppe von Kontrollkästchen angezeigt werden soll. Jeder Satz kann eine beliebige Anzahl von Möglichkeiten.

Meine Ansicht Modell Klasse sieht wie folgt aus:

public class MyViewModelClass
{
    public Area Area { get; set; }

    public bool IsGeneric { get; set; }

    public string Code { get; set; }

    public bool IsChecked { get; set; }
}

So ist die letzte Ansicht wird in etwa so aussehen:


Bitte wählen Sie diejenigen, die gelten:

Erste Reihe von Optionen:

  • x Option 1
  • x Option 2
  • x Option 3
  • etc.

Zweite Reihe von Möglichkeiten:

  • x Zweite Option 1
  • x Zweite Option 2
  • x Zweite Option 3
  • x Zweite Option 4
  • etc.

Ankreuzfelder sollten MyViewModelClass.Area.Name anzuzeigen, und deren Wert sollte auf MyViewModelClass.Area.Id bezogen werden. Geprüft Zustand ist natürlich im Zusammenhang mit MyViewModel.IsChecked.

Frage

Ich frage mich, wie soll ich Html.CheckBox() oder Html.CheckBoxFor() Helfer verwenden, um meine Kontrollkästchen angezeigt werden? Ich muss diese Werte auf einem Postbacks natürlich an den Server zurück.

Ich mag meine Controller-Aktion wie eine von ihnen haben:

public ActionResult ConsumeSelections(List<List<MyViewModelClass>> data)
{
    // process data
}

public ActionResult ConsumeSelections(List<MyViewModelClass> first, List<MyViewModelClass> second)
{
    // process data
}

Wenn es macht die Dinge einfacher, könnte ich eine separate Ansicht Modelltyp wie machen:

public class Options
{
    public List<MyViewModelClass> First { get; set; }

    public List<MyViewModelClass> Second { get; set; }
}

Neben Änderung meiner erste Version der Controller-Aktion an:

public ActionResult ConsumeSelections(Options data)
{
    // process data
}
War es hilfreich?

Lösung 2

Lösung

Es stellt sich heraus, das gar nicht so kompliziert ist. Alles was Sie tun müssen, ist Ihre Kontrollen benennen angemessen und alles wird miteinander verbunden sein, wie es sein sollte. Damit. Was auch immer Ihre Kontrollen, sollten sie immer so genannt werden:

name="first[0].propName"
name="first[1].propName"
name="first[2].propName"
name="first[3].propName"
...

// or
name="first[0].data[0].property"
name="first[0].data[1].property"
name="first[0].data[2].property"
...
name="first[1].data[0].property"
name="first[1].data[1].property"
...

Alles wird erhalten diese gebunden Controller Aktionsparameter (die zweite hat eine andere Sammlung in einer Sammlung) List<SomeType> first.

Sehr wichtiger Hinweis
Wenn Sie hinzufügen / entfernen Sie diese Steuerelemente dynamisch mit Javascript, müssen Sie sicherstellen, dass Indizes in Folge ausgehend von 0 sind, und keine Lücken aufweisen. Und Sie werden in einer Sammlung eine schöne Arbeits App mit dynamischer Anzahl von Elementen haben.

Sie können über sie in mein Blog veröffentlicht auch.

Andere Tipps

Generell erstelle ich einen Typ (Modell), dass „Modelle“ die Ansicht, die ich erstellen möchten. d.

public class FooViewModel
{
    public List<Option> General { get; set; }
    public List<Option> Others { get; set; }

    //Some Methods and other properties
}
public FooController :...
{
    private FooViewModel fooViewModel = new FooViewModel();
}

Edit: Hier finden Sie aktuelle diesen Beitrag , wie es ist genau das, was Sie wollen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top