我正在嘗試開發我們公司需要的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