一般我們在mvc開發過程中,都會碰到這樣的問題。頁面總是寫在views資料夾下,而且還只能乙個controller的頁面只能寫在相應的以controller名命名的資料夾下。如果我們寫到別處呢?那麼肯定會報錯。這是mvc中乙個約定俗成的乙個規定,必須這樣寫。我們要訪問index頁面,只需要輸入home/index就可以訪問了。我們之所以能夠這樣訪問,是因為我們在專案建立之初系統就預設配置了乙個預設的路由。我們可以按照這個預設的路由規則進行訪問。
如果我們要訪問admin下的testcontroller裡面的index頁面,那麼我們輸入test/index,這個肯定不行的。因為testcontroller根本就不在controllers的根目錄下,而是在controllers/admin下,這樣我們根本就找不到test這個controller。那麼我們輸入admin/test/index,那麼我們就需要新增乙個路由配置了,因為以前的預設路由只能通過//這種方式訪問,就是必須以controller開頭。我們重新配置的路由如下:
1那麼我們這個時候再次輸入admin/test/index,能找到views/admin/test/index.cshtml這個頁面嗎?顯然是不能的,因為除了路由配置怎麼訪問controller外,尋找views裡面的頁面也有自己的規則。測試結果肯定是找不到頁面,我們看看錯誤資訊就知道他是怎麼尋找cshtml頁面了。 表示controller的名稱,表示檢視名稱,shared是存放模板頁的資料夾。一看就很清楚了。這個就是尋找檢視的規則,所以我們存放在admin/test/index.cshtml的存放規則就不滿足。那麼我們修改下,如下圖:public
static
void
registerroutes(routecollection routes)
2.axd/");
45//路由規則匹配是從上到下的,優先匹配的路由一定要寫在最上面。因為路由匹配成功以後,他不會繼續匹配下去。
6routes.maproute(7"
admin
", //
路由名稱,這個只要保證在路由集合中唯一即可8"
admin///
", //
路由規則,匹配以admin開頭的url
9new //
10);
1112
routes.maproute(13"
default
", //
route name14"
//", //
url with parameters
15new //
parameter defaults
16);
1718 }
直接將test資料夾存放在views下面,那麼我們就滿足這個尋找檢視的規則了,我們輸入admin/test/index,也確實訪問成功了。
但是這個方式的儲存肯定不是我們需要的,既然我們controller區分存放了,我們肯定也希望views也能夠這樣存放的。
在專案中新建立乙個cs類myviewengine,繼承razorviewengine。**如下:
using然後將這個規則註冊到系統中,在global中註冊一下,這樣我們就可以通過自己的方式來訪問了。global註冊如下:system;
using
system.collections.generic;
using
system.linq;
using
system.web;
using
system.web.mvc;
namespace
mvcroute.mvcex
/.cshtml",
"~/views/shared/.cshtml",
"~/views/admin//.cshtml"//
我們的規則
}; }
public
override viewengineresult findview(controllercontext controllercontext, string viewname, string mastername, bool
usecache)}}
1結果如下圖:protected
void210
11protected
void
registerview()
12
MVC 在Views的多級資料夾
在mvc裡,你的控制器對應的檢視一般是在views目錄,而如果希望在views裡再分幾個模組資料夾預設是不允許的,我們需要做一下設定,就可以實現views下的多次資料夾層次了,例如,我們有產品模組,使用者模組,訂單模組,我們就可以把它的資料夾結構設計成如下 使用者模組 views usermodel...
MVC 在Views的多級資料夾 續 分部頁的支援
之前寫的一篇文章,主要針對view檢視,它可以放在n級目錄下,不必須非要在views controller action這種關係了,而在程式執行過程中,發現分頁檢視對本功能並不支援,原因很簡單,在razorviewengine有不同的屬於來修飾這兩個東西,對於view的查詢,通過viewlocati...
非常簡單的實現MVC多級目錄
第一步 建立目錄結構 看需求來定 第二步 新增route routes.maproute new protected override void onactionexecuting actionexecutingcontext filtercontext 第四步 按f5鍵 使用filter實現上述功...