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

我不知道我做错了什么

Nopcommerce通过CustomView Engine和Routeprovider重写路由来否决核心目录控制器

我能够自己弄清楚:)但是对于其他开始的非商务开发人员/开始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" });