Asp.net mvc Orchard中的驱动程序和控制器是否有些相同?

Asp.net mvc Orchard中的驱动程序和控制器是否有些相同?,asp.net-mvc,naming-conventions,orchardcms,Asp.net Mvc,Naming Conventions,Orchardcms,我正在Orchard CMS中创建一个新的小部件。我这样做的方法是首先添加一个路由和控制器,然后在路由中定义的url上运行代码,比如http://localhost:30320/Index My Routes.cs已设置为将此请求路由到指定的控制器,并且屏幕上正在发生任何事情。这一切都很有效 现在,我对结果感到满意,我尝试将所有这些都放在一个新的小部件中。为此,我创建了新的Migrations类,用于设置小部件。这相当简单,现在小部件已添加到主页层 我遇到的是控制器不再执行了。这并不奇怪,因为我

我正在Orchard CMS中创建一个新的小部件。我这样做的方法是首先添加一个路由和控制器,然后在路由中定义的url上运行代码,比如
http://localhost:30320/Index
My Routes.cs已设置为将此请求路由到指定的控制器,并且屏幕上正在发生任何事情。这一切都很有效

现在,我对结果感到满意,我尝试将所有这些都放在一个新的小部件中。为此,我创建了新的Migrations类,用于设置小部件。这相当简单,现在小部件已添加到主页层

我遇到的是控制器不再执行了。这并不奇怪,因为我还没有设置任何路由来指定应该执行的控制器。我想知道,我是否应该将控制器逻辑移到驱动程序方法,这样视图仍然可以获得必要的信息

我现在的司机是这样的:

public class FrontpageDrivers : ContentPartDriver<FrontpageModelPart>
{
    protected override DriverResult Display(FrontpageModelPart part, string displayType, dynamic shapeHelper)
    {
        //return base.Display(part, displayType, shapeHelper);
        if (displayType.StartsWith("Detail"))
            return ContentShape("Parts_Index", () => shapeHelper.Parts_Index(
                                                                    LatestPostCollection: part.LatestPostCollection,
                                                                    TopRatedPostCollection: part.TopRatedPostCollection,
                                                                    TotalMonthCollection: part.TotalMonthCollection,
                                                                    ContentPart: part
                                                                    ));
        return null;
    }
}
[HttpGet]
public ActionResult Detail()
{
    //Do something to get blogposts
    var getter = new GetBlogPost(_blogService, _blogPostService, _votingService);
    getter.Initialize();

    var latestPosts = getter.GetLatestPosts();
    var highestRankedPosts = getter.GetHighestRankedPosts();
    var archiveData = getter.GetTotalPostsPerMonth();

    var viewModel = new FrontpageModelPart();
    viewModel.LatestPostCollection = latestPosts;
    viewModel.TopRatedPostCollection = highestRankedPosts;
    viewModel.TotalMonthCollection = archiveData;

    return View("Index", viewModel);
}
我尝试过将该方法重命名为Index和Detail,但这两种方法都不起作用。 显示的视图是
/Views/Parts/Index.cshtml
。如果我在文件中放入一些静态文本,我可以看到该视图被正确渲染

那么,我应该将控制器逻辑移动到驱动程序,还是在设置中忘记了什么

注意:我已经准备好了位置、模块、迁移和处理程序

编辑: 如果我使用这段代码,一切都很好:

protected override DriverResult Display(FrontpageModelPart part, string displayType, dynamic shapeHelper)
{
    var controller = new PartsController(Services, _blogService, _blogPostService, _votingService);
    part = controller.GetIndexViewModel();

    if (displayType.StartsWith("Detail"))
        return ContentShape("Parts_Index", () => shapeHelper.Parts_Index(
                                                                LatestPostCollection: part.LatestPostCollection,
                                                                TopRatedPostCollection: part.TopRatedPostCollection,
                                                                TotalMonthCollection: part.TotalMonthCollection,
                                                                ContentPart: part
                                                                ));
    return null;
}

即使这样做效果很好,但对我来说就像是“黑客入侵”…

当你想接管内容区中出现的所有内容时,使用控制器,但返回一个形状结果,这样主题、小部件等仍然可以同步。这就是你的控制器无法做到的