成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MVC路由自定義及視圖找尋規則

開發 后端
MVC路由為什么能找到控制器?為什么控制器return View();就能找到視圖,而為什么視圖一定要建在Views文件下?好像說的有點多了,接下來一邊上例子,一邊分析!

這篇關于MVC路由及視圖規則本來是昨天要發的,但是本人真的有點懶,終于今天忍無可忍了。初學MVC的時候比現在還菜一點(現在也很菜),想著會用就行,但是有時還是會好奇,為什么它能找到控制器?為什么控制器return View();就能找到視圖,而為什么視圖一定要建在Views文件下?好像說的有點多了,接下來一邊上例子,一邊分析!

MVC路由自定義

相信對于MVC路由的配置大家也都了解過一些,其實,這也不是本章的重點。

創建MVC項目的時候,根目錄下>>App_Start>>RouteConfig,這個類就是用來配置路由的,開始會有個默認路由。

簡單介紹下:***個參數:路由名稱(***),第二個參數url:需要注意的是{controller}、{action}都是相當于占位符。第三個參數則是默認路由了。

場景:當你的控制器需要根據不同功能來分類時,假如需要做不同產品,希望把同一產品的控制器放在一起。可以這樣做:

添加一條路由規則:

  1.          public static void RegisterRoutes(RouteCollection routes) 
  2.           { 
  3.               routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
  4.               routes.MapRoute( 
  5.                   name"Product"
  6.                   url: "Product/AboutPrice/{controller}/{action}/{id}"
  7.                   defaults: new { controller = "Sale"action = "Index", id = UrlParameter.Optional } 
  8.               ); 
  9.    
  10.              routes.MapRoute( 
  11.                  name"Default"
  12.                  url: "{controller}/{action}/{id}"
  13.                  defaults: new { controller = "Home"action = "Index", id = UrlParameter.Optional } 
  14.              ); 
  15.          } 

注意點:路由規則匹配是從上到下的,優先匹配的路由一定要寫在最上面。因為路由匹配成功以后,它就不會繼續匹配下去。當然我們創建的控制器目錄也得符合才能匹配。

結果:

MVC視圖找尋規則

在上面那部分即使我們自定義了路由,但是視圖創建的位置還是得乖乖放在Views文件夾下,(不然的話,結果肯定是找不到視圖)我們同樣也希望View位置是可配。

希望控制器返回的視圖能在這個目錄下:

①首先,需要寫一個類來自定義我們視圖的映射規則,這里我就建在App_Start文件夾下,跟其他配置類一起。

  1. public sealed class MyViewRule:RazorViewEngine 
  2.       { 
  3.           public MyViewRule() { 
  4.    
  5.               ViewLocationFormats = new string[] { 
  6.                   //我們定義的視圖找尋規則,和路由配置一樣,它是從上往下匹配,如果兩個路徑下都有著視圖,它會展示***個。 
  7.                   "~/ProductViews/AboutPrice/{1}/{0}.cshtml"
  8.                   //這是默認設置的,覺得用不到可以刪掉,{1}表示控制器名稱,{0}表示視圖名稱 
  9.                   "~/Views/{1}/{0}.cshtml"
  10.                  "~/Views/Shared/{0}.cshtml" 
  11.              }; 
  12.          } 
  13.      } 

 

②然后,需要在全局Global.asax.cs里面注冊我們的規則,代碼如下:

  1.   public class MvcApplication : System.Web.HttpApplication 
  2.       { 
  3.           protected void Application_Start() 
  4.           { 
  5.               AreaRegistration.RegisterAllAreas(); 
  6.               FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
  7.               RouteConfig.RegisterRoutes(RouteTable.Routes); 
  8.               BundleConfig.RegisterBundles(BundleTable.Bundles); 
  9.               //上面是項目創建默認注冊的,下面兩條:先把原來的規則清空,再把我們設置加上() 
  10.              ViewEngines.Engines.Clear(); 
  11.              ViewEngines.Engines.Add(new MyViewRule()); 
  12.          } 
  13.      } 

測試結果:

錯誤:The view at '~/ProductViews/AboutPrice/Sale/Index.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.

大概意思是:沒有繼承這個WebViewPage類,在編譯的時候,這個視圖頁面也是會生成一個類的,解決的辦法有兩種:

①直接讓它繼承那個類(@inherits System.Web.Mvc.WebViewPage)

  1.  @{ 
  2.       Layout = null
  3.   } 
  4.   @inherits System.Web.Mvc.WebViewPage 
  5.   <!DOCTYPE html> 
  6.     
  7.   <html> 
  8.   <head> 
  9.       <meta name="viewport" content="width=device-width" /> 
  10.      <title>Index</title> 
  11.  </head> 
  12.  <body> 
  13.      <div> 我視圖位置不一樣的哦! 
  14.      </div> 
  15.  </body> 
  16.  </html> 

當然,上面這個辦法,有個不好的地方就是每次添加一個視圖就得寫一次,視圖多的話極不方便。我們還可以通過配置文件讓它繼承WebViewPage

②添加配置文件(web.config),在pages節點下繼承WebViewPage。或者在默認創建Views文件夾下有個Web.config復制到/ProductViews/AboutPrice下。(局部配置文件,就近原則)

  1. <pages pageBaseType="System.Web.Mvc.WebViewPage"
  2. </pages> 

結果:

 

總結

關于MVC怎么找到控制器,控制器怎么匹配視圖希望能給有需要的小伙伴一點幫助,也是自己的一個總結,不妥之處,歡迎指正。

程序員在學習的路上永遠不要怕遇到問題,這是成長,也是一種鍛煉,在這個極其需要經驗的行業,倒下的是那些渾渾噩噩的。遇到問題,努力解決,總有柳暗花明時,那時是滿足的喜悅,共勉!

責任編輯:武曉燕 來源: 博客園
相關推薦

2023-12-04 07:27:54

SpringMVC方法

2009-07-22 15:27:39

ASP.NET MVC自定義路由

2023-03-26 08:41:37

2013-01-14 11:40:50

IBMdW

2009-11-24 15:11:21

ASP.NET MVC

2015-06-10 10:54:24

自定義路PHP

2015-06-18 17:34:25

ASP.NET

2021-12-30 08:39:56

Zabbix更換 logo運維

2017-08-03 17:00:54

Springmvc任務執行器

2022-11-10 07:53:54

Spring參數校驗

2012-08-23 08:46:53

小型企業商務應用自定義視圖

2015-02-12 15:33:43

微信SDK

2010-04-30 09:32:49

ASP.NET MVC

2021-08-13 08:36:15

SpringMVC自定義

2009-08-05 18:01:20

C#自定義異常處理

2015-02-12 15:38:26

微信SDK

2009-08-07 11:12:58

ASP.NET控件開發

2016-12-26 15:25:59

Android自定義View

2019-07-23 10:40:05

云原生云計算公共云

2016-11-16 21:55:55

源碼分析自定義view androi
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久88 | 亚洲精品一区中文字幕乱码 | 欧美在线一二三 | 国产精品一区二区不卡 | 色爽女| 色综合久| 91亚洲视频在线 | 午夜精品久久久久久久星辰影院 | 国产精品久久国产精品久久 | 久久久99国产精品免费 | 日韩一区在线观看视频 | 欧美 日韩 亚洲91麻豆精品 | 视频在线一区二区 | 国内精品一区二区 | 亚洲欧洲一区二区 | 国产精品久久久久久久 | 在线观看中文字幕av | 国产精品久久久久久久久久久新郎 | 亚洲永久入口 | 有码一区 | 7777久久 | 国产精品视频网 | 成人三级视频 | 国产精品一区二区在线 | 日韩av免费在线电影 | 日本不卡一区二区三区在线观看 | 99国产精品99久久久久久 | 国产精品久久av | 国产精品精品视频一区二区三区 | 久久久久久国产精品久久 | 狠狠草视频 | 精品二区 | 欧美色欧美亚洲另类七区 | 国产免费观看一区 | 大陆一级毛片免费视频观看 | 精品久久久久久久久久 | 成年人在线电影 | 手机av免费在线 | 欧美日韩在线成人 | 久久精品亚洲精品国产欧美kt∨ | 精品乱子伦一区二区三区 |