Umbraco中的部分模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Umbraco中的部分模型相关的知识,希望对你有一定的参考价值。

我的“关于我们”页面上有以下代码段(为清晰起见,请缩短):

@foreach(var employee in CurrentPage.Employee) {

                  <img class="img-fluid" src="@Umbraco.Media(Convert.ToString(employee.Photo)).umbracoFile" alt="" />


                <h2>@employee.Name</h2>
                <h3>@employee.Title</h3>
                <span>@employee.Bio</span>
        }

foreach的主体实际上更大,我特别选择将图像留在片段中以显示@ Umbraco.Media的用法

所以我想把它提取到Partial。这是部分代码:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage<ContentModels.Employee>
@using ContentModels = Umbraco.Web.PublishedContentModels;
@using Umbraco.Web;

<img class="img-fluid" src="@Umbraco.Media(Convert.ToString(Model.Content.Photo)).umbracoFile" alt="" />

    <h2>@Model.Content.Name</h2>
    <h3>@Model.Content.Title</h3>
    @Model.Content.Bio

然后该页面变为:

@foreach(var employee in CurrentPage.Employee) {

   @html.Partial("Employee", new global::Umbraco.Web.Models.RenderModel(employee, Model.CurrentCulture))
        }

问题是我得到了

 Cannot bind source content type Umbraco.Web.Models.DynamicPublishedContent to model content type Umbraco.Web.PublishedContentModels.Employee.

我认为我的问题来自于我使用CurrentPage.Employee遍历我的Employees而不是像Model.Children这样的东西。

无论如何,有没有办法让Model脱离DynamicPublishedContent?

答案

我发现了我的问题。实际上,作为一个经验法则,你不应该使用CurrentPage

我将“关于我们”页面中的代码更改为:

 @foreach(var employee in Model.Content.Children("Employee")) {
     @Html.Partial("Employee", employee)
 }

然后我的部分视图需要像这样开始:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage<ContentModels.Employee>
@using ContentModels = Umbraco.Web.PublishedContentModels;

然后我可以在Employee上使用@Model.Name或任何其他DocumentType属性。

而已!

以上是关于Umbraco中的部分模型的主要内容,如果未能解决你的问题,请参考以下文章

Umbraco 路由或模型绑定

Umbraco 8 模型生成器无法找到 doctype 生成的文件

AJAX相关JS代码片段和部分浏览器模型

与 umbraco 形式有关

csharp 与Umbraco ContentService一起使用的嵌套内容项的模型

如何在 umbraco 中设置全球文化?