2017-08-02 4 views
1

Wir haben mehrere Basisinhaltstypen News, Reviews. Jedes erbt Eigenschaften von unseren Zusammensetzungen: _Page & _Article. Dies ermöglicht es uns, alle drei Inhaltstypen in eine einzige Artikelvorlage zu verwandeln.Mehrere Inhaltstypen in einer Vorlage mit Umbraco.ModelsBuilder

Derzeit IPublishedContent verwenden, bedeutet, dass wir so etwas wie:

if (Model.Content.DocumentTypeAlias == "review") 
    { 
     // ... Do This 
    } 

Mit ModelsBuilder, können wir das nicht mehr machen.

Das Ergebnis ist Modelle wie folgt aussehen:

UML

versucht zu tun: @inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle>, aber dies bedeutet, dass ich alle meine anderen Eigenschaften verlieren.

Welches Modell würden Sie für eine Vorlage mit mehreren Inhaltstypen erben, oder müssen wir noch etwas anderes tun?

Ein Hinweis zu diesem Thema: Ich würde gerne _Page> _Article> ContentType machen, aber es würde riesigen Datenverlust bedeuten.

Antwort

1

Wenn Sie @inherits UmbracoViewPage<Umbraco.Web.PublishedContentModels.IArticle> tun, dann könnten Sie etwas wie var review = Model as Umbraco.Web.PublishedContentModels.Review tun. Wenn review nicht null ist, wissen Sie, dass die Seite vom Typ Review ist.

(By the way, kann nicht erinnern, wenn es sein muss Model.Content Sie die gossen.)

+0

Held. Genau das habe ich gebraucht, vielen Dank. –

0

Während Sie frei erben Razor Vorlagen von einer ModelsBuilder Klasse sind, in der Regel die meisten, in meiner Erfahrung verwenden ModelsBuilder um ein Standardansichtsmodell in einem Controller unter Verwendung von Route Hijacking zu hydratisieren.

Offensichtlich ist es Ihre Aufgabe, diese Ansichtsmodelle zu erstellen und zu pflegen, aber für viele ist das Standardverfahren, ob mit Umbraco oder nicht.

0

Wie Mörtenböck sagt, können Sie @inherits UmbracoViewPage<IArticle> tun und dann könnte man tatsächlich die Art erkennen, indem var isReview = Model is Review tun

ich den Umbraco.Web.PublishedContentModels. Teil der Modelle Namen entfernt. Dies ist nicht notwendig, da sie bereits in Views/Web.config referenziert sind.

+0

Dies ist besser geeignet für einen Kommentar zu Mortenbocks Antwort. – trincot

0

Sie könnten die Schnittstelle für das Modell verwenden und dann is und as verwenden, um nach den Typen zu suchen und entsprechend zu handeln.

Verwandte Themen