0

我创建了一个内容类型“俱乐部”,并在其中添加了部分名称“课程”。我想在我的控制器代码中获取俱乐部(内容类型)列表。

    public ActionResult Index(PagerParameters pagerParameters, CourseSearchVM search)
    {
        //this is displaying only published content
        var courseQuery = _contentManager.Query<CoursePart>().List().ToList();
        // Project the query into a list of customer shapes
        var coursesProjection = from course in courseQuery
                                  select Shape.course
                                  (
                                    Id: course.Id,
                                    Name: course.Name,
                                    Description: course.Description
                                  );

        // The pager is used to apply paging on the query and to create a PagerShape
        var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters.Page, pagerParameters.PageSize);
        // Apply paging
        var coures = coursesProjection.Skip(pager.GetStartIndex()).Take(pager.PageSize);
        // Construct a Pager shape
        var pagerShape = Shape.Pager(pager).TotalItemCount(courseQuery.Count());
        // Create the viewmodel
        var model = new CourseIndexVM(coures, search, pagerShape);
        return View(model);
    }
4

1 回答 1

0

您必须在您的控制器中访问 IContentManager,您只需将其添加到构造函数即可(请参阅依赖注入,autofac 会做到这一点)。除此之外,您还可以使用 IOrchardServices,它可以让您访问一些常用服务(如果您想使用其中的两个以上依赖项,请执行此操作)

     public MyController(IOrchardServices services){
         this.services = services;
     }

在您的操作中,您可以执行以下操作:

     services.ContentManager.HqlQuery()
            .ForType("Club").List()
            .Select(ci => services.ContentManager.BuildDisplay(ci, "Summary"));

第一部分将创建您的 ContentType 及其内容部分的列表,然后它只是将结果投影到形状列表中,之后,您可以将这些形状附加到另一个形状以显示列表。

完成动作:

     var clubs = services.ContentManager.HqlQuery()
            .ForType("Club").List()
            .Select(ci => services.ContentManager.BuildDisplay(ci, "Summary"));

        var shape = services.New.ClubList();
        shape.Clubs = clubs;
        return new ShapeResult(this, shape);

这将返回一个具有属性 Clubs 的形状,它是您在 Drivers 上定义的形状列表。请注意,您必须为 ClubList 创建一个视图。在您的形状 ClubList 中,您可以通过执行以下操作来显示您的俱乐部形状:

   @foreach (var club in Model.Clubs) {
                    @Display(club)
             }
于 2013-12-16T14:37:37.787 回答