修改Umbraco自定义控制器中的IPublishedContent属性

时间:2017-07-06 09:42:46

标签: c# umbraco

首先,我意识到我的问题的核心可能是我试图解决它的方式,所以让我先解释一下我想要做的事情。

我有一个我输出属性的布局。

Layout.cshtml

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

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

...

这是其他模板的基础:

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可能是一个坏主意,但是解决这个问题的方法是什么。

2 个答案:

答案 0 :(得分:1)

我会在单独的局部视图中渲染此标题,并为该局部视图提供要渲染的特定模型。

看看我写的这篇博文,向您展示如何做到这一点。 http://www.codeshare.co.uk/blog/how-to-optimise-your-website-for-search-engines-seo-in-umbraco/

亲切的问候

答案 1 :(得分:0)

我知道,这是一篇过时的文章,但是其他人可能会搜索该问题的解决方案。能够覆盖属性值绝对有意义,尤其是在路由劫持方案中。解决方案是编写自己的IPublishedContent实现。它只需要几行代码。解决方案显示在此博客文章中: https://www.formfakten.de/themen/2018/08/publishedcontent-with-overridden-properties