修改 Umbraco 自定义控制器中的 IPublishedContent 属性
Modify IPublishedContent properties in Umbraco custom controller
首先,我意识到我的问题的核心可能是我试图解决它的方式,所以让我先解释一下我正在尝试做什么。
我有一个输出 属性 的布局。
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
可能不是一个好主意,但解决这个问题的方法是什么。
我会在单独的局部视图中呈现此标题,并为该局部视图指定要呈现的特定模型。
看看我写的这个博客 post,它向您展示了如何做到这一点。
http://www.codeshare.co.uk/blog/how-to-optimise-your-website-for-search-engines-seo-in-umbraco/
亲切的问候
保罗
我知道,这是一个旧问题 post,但其他人可能会搜索此问题的解决方案。能够覆盖 属性 值绝对有意义,尤其是在路由劫持场景中。解决方案是编写自己的 IPublishedContent 实现。它只需要几行代码。解决方案显示在这篇博客 post 中:
https://www.formfakten.de/themen/2018/08/publishedcontent-with-overridden-properties
首先,我意识到我的问题的核心可能是我试图解决它的方式,所以让我先解释一下我正在尝试做什么。
我有一个输出 属性 的布局。
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
可能不是一个好主意,但解决这个问题的方法是什么。
我会在单独的局部视图中呈现此标题,并为该局部视图指定要呈现的特定模型。
看看我写的这个博客 post,它向您展示了如何做到这一点。 http://www.codeshare.co.uk/blog/how-to-optimise-your-website-for-search-engines-seo-in-umbraco/
亲切的问候
保罗
我知道,这是一个旧问题 post,但其他人可能会搜索此问题的解决方案。能够覆盖 属性 值绝对有意义,尤其是在路由劫持场景中。解决方案是编写自己的 IPublishedContent 实现。它只需要几行代码。解决方案显示在这篇博客 post 中: https://www.formfakten.de/themen/2018/08/publishedcontent-with-overridden-properties