我正在 Orchard CMS 中创建一个新的小部件。我这样做的方法是首先添加一个 Route 和 Controller,然后通过在 Route 中定义的 url 上运行代码来尝试该功能,例如http://localhost:30320/Index
My Routes.cs 已设置,因此它将这个请求路由到指定的控制器和东西是发生在屏幕上。这一切都很好。
现在我对结果感到满意,我尝试将所有这些都放在一个新的小部件中。为此,我创建了新的 Migrations 类来设置小部件。这相当简单,现在小部件已添加到主页层。
我遇到的事情是控制器不再执行。不是很奇怪,因为我没有设置任何指定控制器应该执行的路由。我想知道,我是否应该将 Controller 逻辑移动到 Driver 方法,以便 View 仍然可以获得必要的信息?
我现在拥有的驱动程序如下所示:
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;
}
}
需要执行的 PartsController 方法如下所示:
[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;
}
尽管这工作得很好,但对我来说就像是“黑客”......