Asp.net mvc 3 主页中的Orchard CMS呈现模块视图

Asp.net mvc 3 主页中的Orchard CMS呈现模块视图,asp.net-mvc-3,orchardcms,Asp.net Mvc 3,Orchardcms,我试图在主站点主页(~/)中呈现一个在模块中定义的视图,作为它的主要内容。如果用户未通过身份验证,则需要显示登录/注册视图 登录视图位于一个模块(产品模块)中,登录/注册视图位于另一个模块(帐户模块)中。登录视图需要一个服务调用来根据用户的产品获取数据。我目前正在使用标准mvc渲染这些视图,并获取它们在控制器中所需的数据 这可以通过将这些视图视为形状模板来实现吗?如果有的话,有没有像这样将视图拉入主页的例子?还是有更好的方法来实现这一点 我尝试在产品模块中实现IHomePageProvider以

我试图在主站点主页(~/)中呈现一个在模块中定义的视图,作为它的主要内容。如果用户未通过身份验证,则需要显示登录/注册视图

登录视图位于一个模块(产品模块)中,登录/注册视图位于另一个模块(帐户模块)中。登录视图需要一个服务调用来根据用户的产品获取数据。我目前正在使用标准mvc渲染这些视图,并获取它们在控制器中所需的数据

这可以通过将这些视图视为形状模板来实现吗?如果有的话,有没有像这样将视图拉入主页的例子?还是有更好的方法来实现这一点

我尝试在产品模块中实现IHomePageProvider以返回我自己的主页ViewResult,但没有成功


干杯

首先,您可能需要查看小部件和层。您可以为经过身份验证的用户定义一个层,为匿名用户定义一个层,并将小部件附加到这些层以实现您想要的功能。这可能是你实现这一目标的最佳方式。在Orchard文档中查找如何执行此操作的示例

在使用自定义控制器和许多自定义逻辑之前,我做过类似的事情。由于我的特殊要求,小部件和层不适用于此。页面上的所有内容都需要根据某些输入进行更改,而小部件和层并不适合这样做。我所做的是创建一个自定义控制器和一个具有高优先级的相应路由(因此该路由优先于希望成为主页的任何其他路由)。我一点也没惹我

在控制器操作中,我提取了必要的数据,创建了所需的形状,然后返回如下结果:
returnnewshaperesult(这是homePageShape)

homePageShape
是这样构造的,就在return语句之前:

        // Create personalized home page shape: 
        var homeShape = _orchardServices.New.CustomHome(
            SomeShape1: someShape1
            , SomeShape2: someShape2
            , SomeModel1: someModel1
            ...
        );
这将创建一个名为CustomHome的形状,orchard将在模块的“视图”文件夹中自动查找名为CustomHome.cshtml的模板

我创建了几个形状(上面所有的“someShapeX”变量)。大多数情况下,它们是通过BuildDisplay()方法从内容部分创建的。使用IContentManager查询内容部分,并按如下方式创建形状(此示例适用于幻灯片放映形状):

根据用户是否登录,您可以在控制器中放入逻辑以生成所需的形状。在CustomHome.cshtml中,您将呈现如下形状:

        @Display(Model.SomeShape1)

首先,您可能希望查看小部件和层。您可以为经过身份验证的用户定义一个层,为匿名用户定义一个层,并将小部件附加到这些层以实现您想要的功能。这可能是你实现这一目标的最佳方式。在Orchard文档中查找如何执行此操作的示例

在使用自定义控制器和许多自定义逻辑之前,我做过类似的事情。由于我的特殊要求,小部件和层不适用于此。页面上的所有内容都需要根据某些输入进行更改,而小部件和层并不适合这样做。我所做的是创建一个自定义控制器和一个具有高优先级的相应路由(因此该路由优先于希望成为主页的任何其他路由)。我一点也没惹我

在控制器操作中,我提取了必要的数据,创建了所需的形状,然后返回如下结果:
returnnewshaperesult(这是homePageShape)

homePageShape
是这样构造的,就在return语句之前:

        // Create personalized home page shape: 
        var homeShape = _orchardServices.New.CustomHome(
            SomeShape1: someShape1
            , SomeShape2: someShape2
            , SomeModel1: someModel1
            ...
        );
这将创建一个名为CustomHome的形状,orchard将在模块的“视图”文件夹中自动查找名为CustomHome.cshtml的模板

我创建了几个形状(上面所有的“someShapeX”变量)。大多数情况下,它们是通过BuildDisplay()方法从内容部分创建的。使用IContentManager查询内容部分,并按如下方式创建形状(此示例适用于幻灯片放映形状):

根据用户是否登录,您可以在控制器中放入逻辑以生成所需的形状。在CustomHome.cshtml中,您将呈现如下形状:

        @Display(Model.SomeShape1)

回答得很好,谢谢!如果它对我有效,我将尝试并标记为答案:)答案很好,谢谢!如果对我有效,将尝试并标记为答案:)