天天看點

asp.net mvc 控制器和視圖的花式玩法

首先我們來梳理下邏輯;

例如:

建立了一個名為lanmu(欄目)的控制器,

控制器下面有個index的Action(方法),

我們在方法上添加一個視圖後,該視圖對應的是控制器lanmu下面的index方法;

但是我們在實際操作的時候,直接return View()後找的就是目前的方法名字為和視圖名字一緻的視圖;(好像有點繞,多讀幾遍,就了解了--哈哈~!)

但是

如果我們這樣寫return View(“list”),

位址欄輸入:http:xxx.xxx.com/lanmu/index/

它跳轉的其實是視圖檔案夾為“lanmu”下的“list”視圖檔案,如果“list”視圖綁定有“list”控制器的“變量”,在這樣的跳轉視圖後,“list”視圖上的“變量值”是空的。

由此我們實驗得出:

視圖和控制器其實是獨立的存在的。那麼,我們就可以讓一個控制器的Action(方法)去渲染一個或者多個視圖;

這裡有個前提條件就是視圖檔案必須是在:

視圖檔案夾/控制器名一緻的名字/     

或者

視圖檔案夾/Shared/

的檔案夾裡面就行

代碼:

我這裡用到了特性路由,是以,在測試代碼的時候,你也必須開啟特性路由

【必須】啟用路由特性映射

MVC5可以通過路由配置檔案(App_Start/RouteConfig.cs)增加下面代碼

routes.MapMvcAttributeRoutes();

控制器代碼

視圖代碼

news視圖代碼

asp.net mvc 控制器和視圖的花式玩法
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>news</title>
</head>
<body>
    <h1>【news】</h1>
     <h1>@ViewBag.id</h1>
</body>
</html>      
asp.net mvc 控制器和視圖的花式玩法

Product視圖代碼

asp.net mvc 控制器和視圖的花式玩法
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Product</title>
</head>
<body>
     <h1>【Product】</h1>
     <h1>@ViewBag.id</h1>
</body>
</html>      
asp.net mvc 控制器和視圖的花式玩法

結果

輸入:http://localhost:51598/news/6

asp.net mvc 控制器和視圖的花式玩法

輸入:http://localhost:51598/news/

asp.net mvc 控制器和視圖的花式玩法

輸入:http://localhost:51598/product/

asp.net mvc 控制器和視圖的花式玩法

輸入:http://localhost:51598/product/10086

asp.net mvc 控制器和視圖的花式玩法

項目截圖

asp.net mvc 控制器和視圖的花式玩法