Orchard 模块作为局部视图

Orchard Module as Partial view

我在我的应用程序中创建了一个名为 Orchard.Blogs 的模块。既然有了博客视图,我可以将其作为其他视图的部分视图吗?例如:http://localhost/Orchard.Web/Orchard.HrCompany/Payroll/GetPay 是我的 url,在我的 GetPay 视图中,我可以使用 Orchard.Blogs 视图作为局部视图吗?

orchard中的所有view都叫"Shapes",而且你可以在任何地方用"IShapeFactory"界面渲染任何形状,你可以试试下面的代码:

private readonly dynamic _shapeFactory;
public Constructor(IShapeFactory shapeFactory) {
   _shapeFactory = shapeFactory;
}
public void CreateShape(){
    dynamic customShape = _shapeFactory.CustomShape(ViewModel: viewModel);
}

此代码搜索名称为 "CustomShape" 的视图,然后将使用我们发送的命名参数呈现它。 另一方面,您可以在任何视图中直接显示任何形状,例如:

@Display.CustomShape(ViewModel: viewModel)

理论上你可以使用任何你喜欢的视图。但是,许多视图需要视图模型。例如,操作方法返回的视图可能有一个视图模型。如果您想重用该视图,您还必须提供该模型的实例。

正在渲染的形状使用了其他视图。如果你想渲染这些视图,你必须实际创建那个形状的实例。如果这些视图希望形状上存在某些属性,则您也必须设置这些属性。

正如您可能看到的那样,这不是很简单,因为它可能涉及复制大量逻辑来构建所需的数据(例如,考虑创建形状的内容部分驱动程序)。

相反,我会做的是让我们知道您正在查看博客模块的哪些特定视图 "reuse"。也许有更好的方法。例如,您可能想要使用一个 BlogArchives 小部件。或者可能是投影小部件来呈现特定博客的所有帖子。

根据您的具体用例场景,一定会有合适的解决方案。由于我刚刚列出的原因,通常不会盲目地重用其他模块的视图。