Mvc多級Views目錄

2022-03-02 20:26:41 字數 2774 閱讀 5004

一般我們在mvc開發過程中,都會碰到這樣的問題。頁面總是寫在views資料夾下,而且還只能乙個controller的頁面只能寫在相應的以controller名命名的資料夾下。如果我們寫到別處呢?那麼肯定會報錯。這是mvc中乙個約定俗成的乙個規定,必須這樣寫。

我們要訪問index頁面,只需要輸入home/index就可以訪問了。我們之所以能夠這樣訪問,是因為我們在專案建立之初系統就預設配置了乙個預設的路由。我們可以按照這個預設的路由規則進行訪問。

如果我們要訪問admin下的testcontroller裡面的index頁面,那麼我們輸入test/index,這個肯定不行的。因為testcontroller根本就不在controllers的根目錄下,而是在controllers/admin下,這樣我們根本就找不到test這個controller。那麼我們輸入admin/test/index,那麼我們就需要新增乙個路由配置了,因為以前的預設路由只能通過//這種方式訪問,就是必須以controller開頭。我們重新配置的路由如下:

1

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 }

那麼我們這個時候再次輸入admin/test/index,能找到views/admin/test/index.cshtml這個頁面嗎?顯然是不能的,因為除了路由配置怎麼訪問controller外,尋找views裡面的頁面也有自己的規則。測試結果肯定是找不到頁面,我們看看錯誤資訊就知道他是怎麼尋找cshtml頁面了。

表示controller的名稱,表示檢視名稱,shared是存放模板頁的資料夾。一看就很清楚了。這個就是尋找檢視的規則,所以我們存放在admin/test/index.cshtml的存放規則就不滿足。那麼我們修改下,如下圖:

直接將test資料夾存放在views下面,那麼我們就滿足這個尋找檢視的規則了,我們輸入admin/test/index,也確實訪問成功了。

但是這個方式的儲存肯定不是我們需要的,既然我們controller區分存放了,我們肯定也希望views也能夠這樣存放的。

在專案中新建立乙個cs類myviewengine,繼承razorviewengine。**如下:

using

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)}}

然後將這個規則註冊到系統中,在global中註冊一下,這樣我們就可以通過自己的方式來訪問了。global註冊如下:

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實現上述功...