【发布时间】:2015-08-03 15:26:33
【问题描述】:
我正在为 NopCommerce 开发插件。我想覆盖标有 [ChildActionOnly] 的操作。
有一个控制器:
ShoppingCartController {
[ChildActionOnly]
public ActionResult FlyoutShoppingCart(){...}
}
我想扩展原来的控制器:
NewShoppingCartController : ShoppingCartController {
[ChildActionOnly]
public new ActionResult FlyoutShoppingCart(){...}
}
a new 关键字在原始 impl 中使用 b/c 操作不是虚拟的
在 RouteProvider 中,我像这样覆盖路由:
RouteTable.Routes.Remove(RouteTable.Routes["ShoppingCart"]);
routes.MapLocalizedRoute("ShoppingCart",
"cart/",
new { controller = "NewShoppingCart", action = "Cart" },
new[] { "mynamespace" });
所以这对于普通动作来说很好,但不适用于仅子动作 b/c,它是使用 Html.Action 调用的,其中指定了控制器:
@Html.Action("FlyoutShoppingCart","ShoppingCartController",...)
这意味着将在这里调用原始控制器,因此我必须重写视图来替换这样的调用:
@Html.Action("FlyoutShoppingCart","NewShoppingCartController",...)
或 @Html.Action("FlyoutShoppingCart",...)
有没有办法避免更改视图,并强制使用 NewShoppingCartController 而不是 ShoppingCartController?
【问题讨论】:
-
我认为你也应该尝试一个子动作的路线。作为子动作使用与常规动作相同的路由。就像您为
Cart操作创建了一条路线一样,也为FlyoutShoppingCart创建了另一条路线
标签: asp.net-mvc asp.net-mvc-routing nopcommerce