EPiServer 页面和块中的逻辑

Logic inside EPiServer Pages and Blocks

我有一个实例,我在我的模型上使用一个接口来过滤我的块和页面以获取列表(即 select 所有块或页面 "IMyInterface"),但是随之而来的是转换为另一种显示类型的要求(即列出所有 blocks/pages,然后对于每个 block/page,转换为 "MyDisplayType" 并传递给局部视图)

我的问题:是否不鼓励我的 EPiServer 页面和块(我的模型)中的逻辑?

编辑以回应@Ted: PageViewModel 上的一个属性不起作用,属性 == "include me","act of inclusion" 有其他功能(这就是我所说的过滤的意思),因为我的模型上有一个接口,这很自然对我来说也有与模型中的属性相关联的逻辑(因为属性在模型上)。如果我的 class 中没有具有属性的逻辑,那么我需要一个 "helper class" 来托管我认为最好留在模型中的代码。

也许我误解了这个问题,但我会说更常见的方法是拥有特定的视图模型类型。

因此,您的观点将 @model IPageViewModel<SomePageType> 而不仅仅是 @model SomePageType

在您的控制器中,您将 return View(new SomePageViewModel(currentPage)) 而不是 return View(currentPage)

同样的原则适用于其他内容类型(块、媒体等)。

除了 SetDefaultValues.

等特定方法外,我会远离内容类型本身的逻辑

在您的特定情况下,听起来也许您应该将内容列表作为 属性 添加到最初传递的视图模型实例中,然后在视图中枚举 属性 以呈现每个项目使用局部视图?

编辑: 我认为界面非常适合 "grouping" 内容类型,例如获取所有 IArticle 页面,而不管确切的内容类型。我通常将用于检索内容集合(例如 all article pages)的逻辑放在存储库 类 或控制器操作方法中。当然这样的逻辑除了可以通过接口过滤,还可以反映属性。