Frage

Ich möchte eine Liste von verschiedenen (abgeleitet) Objekttypen mit dem Standard arbeiten Modelbinder in Asp.net MVC 2.

Ich habe folgendes Ansichtsmodell:

public class ItemFormModel
    {       
        [Required(ErrorMessage = "Required Field")] 
        public string Name { get; set; }
        public string Description { get; set; }

        [ScaffoldColumn(true)]
        //public List<Core.Object> Objects { get; set; }       
        public ArrayList Objects { get; set; }                  
    }

Und die Liste enthält Objekte von diffent abgeleiteten Typen, z.

public class TextObject : Core.Object
    {
        public string Text { get; set; }
    }

    public class BoolObject : Core.Object
    {
        public bool Value { get; set; }
    }

Es spielt keine Rolle, ob ich die Liste oder die Arraylist-Implementierung verwenden, alles schön zu bekommen ist in der Form eingerüstet, aber die Modelbinder lösen nicht die abgeleiteten Objekttyp Eigenschaften für mich, wenn wieder auf die Action veröffentlichen.

Was könnte eine gute Lösung für das Ansichtsmodell Struktur sein, eine Liste von verschiedenen Objekttypen behandelt zu bekommen? eine zusätzliche Liste für jeden Objekttyp Mit (zB Liste, Liste etc.) scheint mir keine gute Lösung zu sein, da dies viel Aufwand ist sowohl in den Ansichtsmodell zu bauen und sie zurück zu dem Domänenmodell abbildet.

Das Nachdenken über die anderen Ansatz binden alle Eigenschaften in einem benutzerdefinierten Modell Binder, wie kann ich die Daten Anmerkungen hier nähern machen verwenden (Validierung erforderlichen Attribute etc.) ohne viel Aufwand?

War es hilfreich?

Lösung

Überprüfen Sie die Typ Modelbinder in MvcContrib abgeleitet. So können Sie abgeleitete Typen durch den Prozess der ‚typestamping‘ modelbind - die automatisch für Sie behandelt wird, wenn die RenderTypedPartial (...) Helfer verwendet. MvcContrib partials Bindungszustand über partials maintain so die Namen / Id-Präfixe auf einem tiefen Objektgraph richtig gepflegt. Wenn Sie andere Mechanismen wie Vorlagen verwenden, dann müssen Sie die typestamping selbst behandeln. Dies wird in der Dokumentation Seite erklärt.

Kommen wir zurück auf Ihre Fragen und wie die abgeleiteten Typen mit der Modelbinder gelöst sind, können Sie die abgeleiteten Typ Variationen mit Attributen in einem Mechanismus ähnlich dem WCF Knowntype registrieren oder Sie können die Registrierung beim Start tun. In beiden Fällen werden diese Variationen einmal registriert und hielt sich an für Leistungsinformationen.

Das Modell Bindemittel auch dieses Problem in einer Weise löst, die nicht mit Datenaufbelichtung interferiert / Validierung Attribute. Sie arbeiten, wie Sie sie in einem anderen Szenario erwartet.

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