2011-01-03 6 views
0

In meinem Controller, ich bin generisch deserializing Xml. Das Objekt, für das deserialisiert wird, könnte eine beliebige Anzahl verschiedener Typen sein. Dies ist natürlich zur Kompilierzeit nicht bekannt. Ich habe eine Reihe von Teilansichten erstellt, von denen jede stark auf ein anderes Objekt typisiert ist, was ein mögliches Ergebnis der Xml-Deserialisierung ist.ASP.NET MVC: Rückgabe verschiedener Ansichten je nach Objekttyp

Mein Problem ist, dass ich mit einer guten Möglichkeit kämpfe, die richtige Ansicht zurückzugeben. Ich könnte immer eine Eigenschaft im Objekt einschalten oder eine Key/ViewName Dictionary-Mapping verwenden, um den richtigen View-Namen zu erhalten, aber ich hatte auf etwas generischeres gehofft.

Kennt jemand eine Art, die ich implizit sagen könnte, "die Ansicht zurückgeben, die von dem Objekt, das ich habe, abgetippt wird?"?

Danke.

Antwort

0

Ohne Ihren Code zu sehen, ist es schwierig zu sagen, ob das, was Sie tun, zu irgendeiner Best Practice passt, aber von außen scheint es, als wäre Ihr Ansatz etwas verwirrend und restriktiv.

Das heißt, Sie könnten Ihre Ansichten einfach mit dem Typnamen benennen.

so etwas wie return View(xmlObject.GetType().Name + "View");

+0

Ich kann mehr Kontext bieten. Ich habe mehrere untergeordnete Typen, die alle von einem Basistyp erben. Ich verwende System.Xml.Serialization-Attribute für meine Basis- und Unterklassen, um den Serializer anzuweisen, wie das Xml strukturiert werden soll. In der Basisklasse verwende ich [XmlInclude], um anzugeben, dass einer der Untertypen mit einem Serializer, der von der Basisklasse abgetippt wurde, serialisiert werden kann. Dies stellt den Generismus bereit, so dass, wenn das Xml später wieder in ein Objekt deserialisiert wird, es in einem Basisobjekt gespeichert werden kann, aber einen Typ der Unterklasse beibehalten kann. So kann ich mit Objekten unterschiedlicher Typen enden, abhängig davon, was serialisiert wurde. –

Verwandte Themen