2017-07-06 3 views
0

Zunächst einmal, ich realisiere, dass der Kern meiner Probleme wahrscheinlich ist die Art, wie ich versuche, es zu lösen, so lassen Sie mich zuerst erklären, was ich versuche zu tun.Ändern IPPublishedContent Eigenschaften in Umbraco benutzerdefinierten Controller

Ich habe ein Layout, wo ich eine Eigenschaft ausgeben.

Layout.cshtml

inherits Umbraco.Web.Mvc.UmbracoTemplatePage 
... 
//More of the layout here 

<title>@Model.Content.GetPropertyValue("title")</title> 

... 

Dies ist die Basis der anderen Vorlagen ist:

FullWidth.cshtml

@{ Layout = "Layout.cshtml"; } 
... layout here 

Das alles gut funktioniert, ich sicherstellen, dass jede Belegart a hat Eigenschaft namens title und es wird die ganze Zeit gedruckt.

Jetzt erstelle ich eine Seite, auf der einige Daten aus einer Datenbank angezeigt werden. Also hat ich einen benutzerdefinierten Controller:

public class ProductController : RenderMvcController 
{ 
    public ActionResult Index(Rendermodel model, int id) 
    { 
      var viewModel = new CustomRenderModel(model.Content); 
      viewModel.Product = Database.GetProductById(id); 
      return CurrentTemplate(viewModel); 
    } 

} 

Dies funktioniert gut auch, aber das nächste, was ich tun möchte, ist auch den Titel festgelegt, basierend auf was auch immer aus der Datenbank abgerufen werden. Etwas wie folgt aus:

var viewModel = new CustomRenderModel(model.Content); 
var product = Database.GetProductById(id); 
viewModel.Product = product; 
viewModel.Content.SetPropertyValue("title", product.name"); 

Offensichtlich ist dies nicht funktioniert, weil die IPublishedContent nur lesbar ist. Ich frage mich nur, was der beste Weg ist, eine Eigenschaft so zu modifizieren.

Ich weiß, dass das Aussetzen einer SetPropertyValue ist eine schlechte Idee wahrscheinlich, aber was wäre der Weg, um dies zu lösen.

Antwort

1

Ich würde diesen Titel in einer separaten Teilansicht rendern und dieser Teilansicht ein bestimmtes Modell zum Rendern geben.

Schauen Sie sich diesen Blogbeitrag an, den ich geschrieben habe, der Ihnen zeigt, wie Sie das tun. http://www.codeshare.co.uk/blog/how-to-optimise-your-website-for-search-engines-seo-in-umbraco/

Mit freundlichen Grüßen

Paul

+0

Thanks :) Ja, ich wahrscheinlich dachte ich diesen Weg gehen müsste. Wie würden Sie die Daten vom Rendermvc-Controller an die Partiellen übergeben? –

+0

Im Action in der letzten Zeile heißt es: 'Rückkehr PartialView (PartialViewPath ("_ MetaDaten"), Modell);' dann in der Teilansicht verwenden Sie das Modell wie folgt aus: '@model NamespaceName.ModelName ' oder ' @inherits UmbracoViewPage ' – prjseal

+0

Partial View Path ist nur eine kurze Methode, die ich erstellt habe, damit ich Ordner für Teilansicht Dateien verwenden konnte. Es gibt im Grunde einen Pfad für die Teilansicht zurück. 'private Zeichenfolge PartialViewPath (Zeichenfolgename) { Rückgabe $" ~/Views/Partials/SiteLayout/{Name} .cshtml "; } ' – prjseal

Verwandte Themen