日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MVC路由自定義及視圖找尋規(guī)則

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

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對(duì)報(bào)廢汽車回收等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)seo優(yōu)化優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

MVC路由自定義

相信對(duì)于MVC路由的配置大家也都了解過一些,其實(shí),這也不是本章的重點(diǎn)。

創(chuàng)建MVC項(xiàng)目的時(shí)候,根目錄下>>App_Start>>RouteConfig,這個(gè)類就是用來配置路由的,開始會(huì)有個(gè)默認(rèn)路由。

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

場景:當(dāng)你的控制器需要根據(jù)不同功能來分類時(shí),假如需要做不同產(chǎn)品,希望把同一產(chǎn)品的控制器放在一起??梢赃@樣做:

添加一條路由規(guī)則:

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

注意點(diǎn):路由規(guī)則匹配是從上到下的,優(yōu)先匹配的路由一定要寫在最上面。因?yàn)槁酚善ヅ涑晒σ院螅筒粫?huì)繼續(xù)匹配下去。當(dāng)然我們創(chuàng)建的控制器目錄也得符合才能匹配。

結(jié)果:

MVC視圖找尋規(guī)則

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

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

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

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

 

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

 
 
  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.               //上面是項(xiàng)目創(chuàng)建默認(rèn)注冊的,下面兩條:先把原來的規(guī)則清空,再把我們設(shè)置加上() 
  10.              ViewEngines.Engines.Clear(); 
  11.              ViewEngines.Engines.Add(new MyViewRule()); 
  12.          } 
  13.      } 

測試結(jié)果:

錯(cuò)誤:The view at '~/ProductViews/AboutPrice/Sale/Index.cshtml' must derive from WebViewPage, or WebViewPage.

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

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

 
 
  1.  @{ 
  2.       Layout = null; 
  3.   } 
  4.   @inherits System.Web.Mvc.WebViewPage 
  5.    
  6.     
  7.    
  8.    
  9.        
  10.      Index 
  11.   
  12.   
  13.      
     我視圖位置不一樣的哦! 
  14.      
 
  •   
  •   
  • 當(dāng)然,上面這個(gè)辦法,有個(gè)不好的地方就是每次添加一個(gè)視圖就得寫一次,視圖多的話極不方便。我們還可以通過配置文件讓它繼承WebViewPage

    ②添加配置文件(web.config),在pages節(jié)點(diǎn)下繼承WebViewPage?;蛘咴谀J(rèn)創(chuàng)建Views文件夾下有個(gè)Web.config復(fù)制到/ProductViews/AboutPrice下。(局部配置文件,就近原則)

     
     
    1.  
    2.  

    結(jié)果:

    總結(jié)

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

    程序員在學(xué)習(xí)的路上永遠(yuǎn)不要怕遇到問題,這是成長,也是一種鍛煉,在這個(gè)極其需要經(jīng)驗(yàn)的行業(yè),倒下的是那些渾渾噩噩的。遇到問題,努力解決,總有柳暗花明時(shí),那時(shí)是滿足的喜悅,共勉!


    本文標(biāo)題:MVC路由自定義及視圖找尋規(guī)則
    標(biāo)題鏈接:http://www.dlmjj.cn/article/dpjhidg.html