Orchard模块作为部分视图

时间:2016-06-15 08:45:07

标签: asp.net-mvc orchardcms

我在我的应用程序中创建了一个名为Orchard.Blogs的模块。现在,我可以将博客视图作为其他视图的部分视图吗?对于Ex:http://localhost/Orchard.Web/Orchard.HrCompany/Payroll/GetPay是我的网址,在我的GetPay视图中,我可以将Orchard.Blogs视图用作局部视图吗?

2 个答案:

答案 0 :(得分:0)

果园中的所有视图都称为“形状”,并且您可以使用“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)

答案 1 :(得分:0)

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

其他视图由呈现的形状使用。如果要渲染这些视图,则必须实际创建该形状的实例。如果这些视图期望形状上存在某些属性,则还必须设置这些属性。

正如您可能看到的,这不是非常简单,因为它可能涉及复制大量逻辑以构建所需数据(例如,想想创建形状的内容部件驱动程序)。

我要做的是让我们知道您希望“重用”的博客模块的特定视图。也许有更好的方法。例如,您可能想要使用BlogArchives小部件。或者也许是投影小工具来呈现特定博客的所有帖子。

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