【发布时间】:2014-10-10 16:50:25
【问题描述】:
我正在尝试为 NOPCommerce 开发我们公司需要的插件。
我很难让我的控制器和视图覆盖默认值并发布this SO question。在受访者的善意帮助下,我能够让一切正常进行。我去处理代码的另一个领域,但当我回来时,它并没有完全工作。
既然我了解了与 RouteProvider.cs 的交互,我可以让我的控制器以各种配置方式覆盖和执行。
然而,我的观点并没有受到打击......但它们就像我有断点一样受到打击。
我知道 MVC 有一个模式/语法期望,如果你不在这些范围内玩,事情就不会起作用,我相信这就是正在发生的事情。我的问题是我不明白游戏规则之一。
这是我能想到的最详尽的纲要。
插件文件夹结构:
目录输出:
C:\ ...\Presentation\Nop.Web\Plugins\Payments.StoreCredit\Core\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);
}
自定义视图引擎:
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 上设置断点,它只会在我实际浏览插件列表时被命中,例如:
//localhost:53764/Admin/Plugin/List
我已经尝试了 NUMEROUS 个 CustomViewEngine newlocation.Insert 变体,但我总是只搜索六个路径。我相信我的新位置已插入,但它们不适用于此上下文,因此不会被搜索?我这样说是因为如果我在核心管理项目中重命名 edit.cshtml 只是为了查看搜索到的路径:
控制器中edit使用的路径:
localhost:53764/Admin/Order/Edit/1006
返回:
最后,如果我在控制器编辑中指定一个路径,例如:
return View("~/Plugins/Payments.StoreCredit/Core/Views/Order/edit.cshtml", model);
我的视图被使用了..但是对 CustomViewEngine 大惊小怪的意义何在?
换句话说,我可以将它们组合在一起,在控制器中指定路径,但 CustomViewEngine 是更强大和更专业的方法。
【问题讨论】:
-
对不起,我不小心删除了我的评论。但如果它有效,我会重新发布它:)
-
对不起,我正在阅读时,它变得噗噗......所以你能重新发布吗? :)
-
当然。这个想法是在填充新位置时尝试
~/Views/Core/{1}/{0}.cshtml而不是~/Plugin/Payments.StoreCredit/Views/Core/{1}/{0}.cshtml。 -
不使用相同的 6 个路径和插件路径。
标签: asp.net-mvc asp.net-mvc-4 nopcommerce razor-2