2017-07-06 1 views
0

まず、私のプロブレムのコアはおそらく私が解決しようとしている方法なので、まず自分がしようとしていることを説明しましょう。UmbracoカスタムコントローラーのIPublishedContentプロパティーを変更します

私はプロパティを出力するレイアウトを持っています。

これは、他のテンプレートのベースである

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

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

... 

Layout.cshtml:

FullWidth.cshtml

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

は、すべてがうまく動作します。これは、私はすべてのドキュメントタイプを持っていることを確認してくださいプロパティーはtitleと呼ばれ、常に印刷されます。

今、データベースの一部のデータが表示されているページを作成しています。だから私は、カスタムコントローラを作成しました:

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); 
    } 

} 

これは、あまりにも素晴らしい作品が、私はやりたい次の事がデータベースから取得されているものに基づいてタイトルをも設定されています。このようなもの:

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

明らかに、これはIPublishedContentが読み取り専用であるために機能しません。私はちょうどそのようなプロパティを変更するのが最善の方法だと思っています。

SetPropertyValueを公開することはおそらく悪い考えですが、これを解決するにはどうすればよいでしょうか。

答えて

1

このタイトルを別の部分的なビューでレンダリングし、その部分的なビューにレンダリングする特定のモデルを与えます。

これを行う方法を示したこのブログ記事をご覧ください。 http://www.codeshare.co.uk/blog/how-to-optimise-your-website-for-search-engines-seo-in-umbraco/

種類が

ポール

+0

についておかげで:)うん、私はおそらく、私はこのルートを移動する必要があると思います考え出し。どのようにレンダリングコントローラからのデータをパーシャルに渡すのですか?最後の行でのActionResultで –

+0

それは言う: 'PartialView(PartialViewPath( "_メタデータ")、モデル)を返す;' 次に、あなたはこのようにそのモデルを使用する部分図で: '@model NamespaceName.ModelName ' または ' @inherits UmbracoViewPage ' – prjseal

+0

パーシャルビューパスは私が作成した短い方法です。部分的なビューファイルのためにフォルダを使用することができます。基本的に部分ビューのパスを返します。 'private string PartialViewPath(文字列名) { return $"〜/ Views/Partials/SiteLayout/{name} .cshtml "; } ' – prjseal

関連する問題