首先,我意識到我的問題的核心可能是我試圖解決它的方式,所以讓我先解釋一下我正在嘗試做什麼。在Umbraco自定義控制器中修改IPublishedContent屬性
我有一個佈局,我輸出一個屬性。
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
可能是一個壞主意,但是解決這個問題的方法是什麼?
謝謝:)是的,我大概算了我不得不走這條路線。你會如何將數據從rendermvc控制器傳遞給partial? –
在最後一行它說的ActionResult: '返回PartialView(PartialViewPath( 「_元數據」),型號);' 然後在局部視圖您使用的模型是這樣的: '@model NamespaceName.ModelName ' 或 '@inherits UmbracoViewPage' –
prjseal
部分視圖路徑只是我創建的一個簡短方法,所以我可以使用部分視圖文件的文件夾。它基本上返回部分視圖的路徑。 'private string PartialViewPath(string name) { return $「〜/ Views/Partials/SiteLayout/{name} .cshtml」; }' – prjseal