Asp.net mvc Orchard中的驱动程序和控制器是否有些相同?
我正在Orchard CMS中创建一个新的小部件。我这样做的方法是首先添加一个路由和控制器,然后在路由中定义的url上运行代码,比如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类,用于设置小部件。这相当简单,现在小部件已添加到主页层 我遇到的是控制器不再执行了。这并不奇怪,因为我
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;
}
即使这样做效果很好,但对我来说就像是“黑客入侵”…当你想接管内容区中出现的所有内容时,使用控制器,但返回一个形状结果,这样主题、小部件等仍然可以同步。这就是你的控制器无法做到的