Nopcommerce通过CustomView Engine和Routeprovider重写路由来否决核心目录控制器
本文关键字:核心 控制器 路由 CustomView 通过 Engine 重写 Routeprovider Nopcommerce | 更新日期: 2023-09-27 18:03:11
在我之前的问题中,我问如何从Nop核心控制器CatalogController继承代码。参见post问题Nopcommerce继承代码从de nop核心控制器
现在我继承了这个核心控制器的代码,但现在我想让nopcommerce使用我的CatalogController而不是核心控制器。为此,我使用了一个CustomViewEnige和一个路由提供程序。
添加新路由后:
routes.MapLocalizedRoute("Nop.Web.Controllers.CatalogController",
"{category}",
new { controller = "Catalog", action = "Category" },
new[] { "Nop.Plugin.Widgets.TryingNewProjectController.Controllers" });
我已经改变了我的路由提供程序代码,所以Nopcommerce现在看到我想要的路由,但现在我仍然得到错误:
对控制器类型的操作"Category"的当前请求'CatalogController'在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类别()的类型Nop.Plugin.Widgets.TryingNewProjectController.Controllers.CatalogControllerSystem.Web.Mvc.ActionResult类别()的类型Nop.Web.Controllers.CatalogController System.Web.Mvc.ActionResult类别(Int32,编号:web . models . catalog . catalogpagingfilteringmodel)类型Nop.Web.Controllers.CatalogController
我不知道我做错了什么
我能够自己弄清楚:)但是对于其他开始的非商务开发人员/开始ASP。web开发人员,这里是答案:
当你为一个控制器/动作创建一个新路由时,你必须在你的新插件中为这个控制器/动作指定一个唯一的名称。这听起来很简单,但我花了很长时间才弄明白。
这是我的旧代码,它不起作用.....
routes.MapLocalizedRoute("Nop.Web.Controllers.CatalogController",
"{category}",
new { controller = "Catalog", action = "Category" },
new[] { "Nop.Plugin.Widgets.TryingNewProjectController.Controllers" });
routes.MapRoute("Nop.Web.Controllers.CatalogController.Category",
"{category}",
new { controller = "TryingNewProject", action = "Category" },
new[] { "Nop.Plugin.Widgets.TryingNewProjectController.Controllers.CatalogController" });