Sitecore MVC Model.Item

Sitecore MVC Model.Item

我在 Sitecore 中使用 MVC 并添加了以下代码以获取上次更新日期。

我是这段代码的例子之一,他们说Model.Item是跟踪上下文项的字段作为数据源。但是,我不清楚 Model.Item 的作用是什么,因为如果我删除 Model.Item 对象,结果是一样的。

This page was last modified on: @Html.Sitecore().Field("__Updated", Model.Item, new { format = "dd/mm/yyyy" })

此外,是否可以在 webPage (.cshtml) 创建的占位符上使用 webForms (.ascx)? 我有许多由 webforms 创建的子布局,想在 .cshtml 布局中使用它们。如何使用它们??

如果您不指定某些内容,

@Html.Sitecore().Field 将使用当前上下文项。最有可能的是,您的 Model.Item == Sitecore.Context.Item.

Model.Item == Context.Item?

正如@Jim-Noellsch 提到的,如果您的代码是基于当前上下文项的 运行,那么默认值将与 Model.Item 相同。但是,如果您正在构建数据源驱动的组件或使用控制器更改了模型上的绑定项,您将需要使用 Model.Item 来确保您拉动绑定到模型的项,而不是上下文项。

MVC 布局中的 Web 窗体?

至于 MVC 布局内的 Web 表单,我认为 Sitecore 不支持开箱即用。您可以查看其他人已完成的一些自定义以执行类似操作 (MVC inside web forms)。从本质上讲,这归结为自定义管道以允许处理不兼容的组件。

混合 Sitecore 解决方案

您还可以构建一个混合站点,其中一些页面使用 Web 窗体,一些页面使用 MVC,但这可能需要您将一些组件从一个组件转换为另一个组件。我最近在这里写了一篇关于混合动力车的 post:http://www.nonlinearcreations.com/Digital/how-we-think/articles/2015/05/MVC-Web-Forms-Hybrid-Sitecore.aspx

对于混合方法,如果您需要在两种布局类型上具有相似的功能,那么是的,您将需要 'duplicate' 个组件(一个子布局,一个渲染)。这是完全可以接受的。您已经有了不同的布局和模板,这只是另一层。您可能还在子布局中放置了一些表示业务逻辑。您可能需要考虑将其移至 ViewModel class,然后在渲染和子布局

中使用相同的 class

使用视图模型

对于您的 Model.Item,您可以指定一个业务对象作为模型对象,而不是为您的模型使用标准的 Sitecore 项目。我在 converting WebForms sublayouts to MVC renderings 上有一个 SlideShare。幻灯片 6 显示了一个 ViewModel 实现示例,幻灯片 8 显示了在 MVC 视图中使用它。从这里开始,您可能可以在子布局后面使用相同的 ViewModel 来集中您的一些逻辑。