我正在尝试开发我们公司需要的NOPCommerce插件。覆盖视图不起作用
我有一些困难让我的控制器和视图覆盖默认的和张贴this SO question。在受访者的善意帮助下,我能够使所有的工作都能够顺利进行。我去了代码的另一个领域,当我回来的时候它并没有完全工作。
我可以让我的控制器覆盖并执行各种配置,现在我理解了与RouteProvider.cs的交互。
然而,我的观点并未受到打击......但他们是因为我有断点,他们正在受到打击。
我知道MVC有一个模式/语法的期望,如果你不在这些边界内玩,事情就不起作用,我相信这就是发生了什么。我的问题是我不明白游戏规则之一。
下面是我能想到的彻底破败。
插件文件夹结构:
目录输出:
C:\ ... \演示\ Nop.Web \插件\ Payments.StoreCredit \核心\ Views \ Order
我的控制器......这是击中......和路由提供商条目:
var OverrideRoute = routes.MapRoute("Plugin....OrderOverride", "Admin/Order/Edit/{id}",
new { controller = "Order", action = "Edit" },
new { id = @"\d+" },
new[] { "Company.Plugin.Payments.StoreCredit.Core.Controllers" }
);
routes.Remove(OverrideRoute); //remove route
routes.Insert(0, OverrideRoute); //add it back to the top
public ActionResult Edit(int id)
{
....again just to be clear controller is being hit...
return View(model);
}
CustomViewEngine:
protected override string GetPath(...parms)
{
...
//custom View locations to the top of the list to be given a higher precedence
newLocations.Insert(0, "~/Plugin/Payments.StoreCredit/Views/Core/{1}/{0}.cshtml");
....
}
一些我注意到的东西,但不能拼凑
如果我设置的CustomViewEngine一个断点,当我实际上浏览插件,如清单永远只能被击中:
//本地主机:53764 /管理/插件/清单
我已经试过CustomViewEngine newlocation.Insert的众多的变化,但我总有只有六所搜索的路径。我相信我的新地点已被插入,但它们不适用于这种情况,因此不会被搜索到?我这样说是因为如果我重命名编辑。CSHTML核心管理项目刚刚看到的路径搜索,我得到:
控制器使用编辑路径:
本地主机:53764 /管理/订单/编辑/ 1006
回报:
最后,如果我指定的控制器编辑的路径,例如:
return View(“〜/ Plugins/Payments.StoreCredit/Core/Views/Order/edit.cshtml”,model);
我的看法是使用..但是,那么与CustomViewEngine有什么关系呢?
换句话说,我可以将它聚集在一起指定控制器中的路径,但CustomViewEngine是更强大和更专业的方式。
对不起,我删除了我的意见意外。但如果它的工作,我会重新发布它:) – Ruslan 2014-10-10 17:00:26
对不起,我正在阅读过程中,当它噗... ...所以你可以转发? :) – GPGVM 2014-10-10 17:01:09
当然。这个想法是在填充newLocations时试用'〜/ Views/Core/{1}/{0} .cshtml'而不是'〜/ Plugin/Payments.StoreCredit/Views/Core/{1}/{0} .cshtml' 。 – Ruslan 2014-10-10 17:01:45