私は2つのコントローラーを持っており、一方は他方を継承しています。nopCommerceのプラグインにページネーションを実装するコードに変更する必要があるため、ベースコントローラーからActionResultをオーバーライドする必要があります。ただし、新しいActionResultが原因で、AmbiguousMatchExceptionが発生します。
ベースコントローラー:
public class BaseController : Controller {
public ActionResult Category(int categoryId, CatalogPagingFilteringModel command)
{
//original action result code
}
}
継承付きのカスタマーコントローラー
public class CustomController : BaseController {
public new ActionResult Category(int categoryId, CatalogPagingFilteringModel command)
{
// my pagination code with different model/view
}
}
ルート情報:ここでは、ベースコントローラーのルートを削除し、CustomCatalogコントローラーを使用するための新しいルートを追加します。
routes.Remove(routes["OriginalCategory"]);
routes.MapLocalizedRoute(
"OriginalCategory",
"Category/{categoryId}/{SeName}",
new { controller = "CustomCatalog", action = "Category", SeName = UrlParameter.Optional },
new { categoryId = @"\d+" },
new[] { "Nop.Plugin.Common.Web.Controllers" });
その後、AmbiguousMatchExceptionが発生します
[AmbiguousMatchException:コントローラータイプ'CustomCatalogController'のアクション'Category'の現在の要求は、次のアクションメソッド間であいまいです:タイプNopのSystem.Web.Mvc.ActionResult Category(Int32、Nop.Web.Models.Catalog.CatalogPagingFilteringModel)。タイプNop.Web.Controllers.CatalogControllerのPlugin.Common.Web.Controllers.CustomCatalogControllerSystem.Web.Mvc.ActionResultCategory(Int32、Nop.Web.Models.Catalog.CatalogPagingFilteringModel)]
編集 ベースコントローラーはアプリケーションのコアにありますが、CustomControllerはプラグインにあるため、ベースコントローラーのタイプを変更することはできません。