2016-04-09 219 views
0

我是新來的ASP MVC編程,並想知道如何配置路由。ASP MVC路由默認配置

比如我有家庭控制器

public ActionResult Home(){ 
    return View("Index") 
} 

這將找到Index.cshtml下/瀏覽/首頁/

但是,如果我重新命名主文件夾Homees例如,觀點沒有找到,我也嘗試返回查看與查看(「〜/ Views/Homees/Index.cshtml」)這是不是改變,控制器沒有找到視圖。

這是asp mvc的默認值嗎?有可能改變這一個?

+0

能否請你說明是什麼錯誤? – dotnetstep

回答

1

有幾點。

  1. ASP.net MVC是基於約定的。它也由@Petar Minev指定。當涉及到搜索視圖時,使用以下方法。它將控制器名稱作爲目錄名稱,並以基於視圖引擎的不同擴展名(例如cshtml,vbhtml,aspx)來查看名稱文件名。 (正如你使用cshtml似乎你正在使用Razor和Webform視圖引擎)。

對於搜索,它將首先轉到帶有控制器名稱的目錄並搜索指定的視圖。如果它不可用,那麼它將轉到共享文件夾。

以上是ASP.net MVC的默認行爲。

  1. 現在你改變文件夾名稱,然後你嘗試過的第一個解決方案,它必須工作,因爲它適用於我。 (請檢查您的文件夾名稱是否正確。確保您沒有重命名區域目錄)。

    public ActionResult Home(){ 
        return View("~/Views/Homees/Index.cshtml") 
    } 
    
  2. 另一種解決方案是HomeesController重命名控制器(因此,它會自動找到正確的目錄)

  3. 如果繼續使用這種方式進行,就像你加上「上課的方式與其它文件夾「在」首頁「中,最好將此約定添加到默認搜索視圖中。 (您可以通過做到這一點從默認RazorViewEngine或改變RazorViewEngine參數繼承)

例如

protected void Application_Start() 
     { 
      RazorViewEngine engine = (RazorViewEngine)ViewEngines.Engines[1]; 
      List<string> currentFormats = engine.ViewLocationFormats.ToList(); 
      currentFormats.Insert(0,"~/Views/{1}es/{0}.cshtml"); 
      engine.ViewLocationFormats = currentFormats.ToArray(); 
      ... Other application start code 
     } 
0

默認微軟的ASP.NET MVC達1個文件夾公約這意味着創建的所有文件,這將是控制器應該控制文件夾下,每個會認爲應查看文件夾下的文件,

另外,如果您創建Mvc Route(例如MyProfile),則在MVC中,您將在視圖的下方使用該名稱和文件夾進行控制。

所有這些都由默認路由控制,它知道在哪裏可以找到,視圖和控制器,所以如果你想做一些改變或修改,你應該去ASP.NET網站,看MVC路由的一些教程

希望我幫忙:)

1

Razor View引擎是ASP.Net MVC的默認視圖引擎。該Razor視圖引擎被配置爲在指定路徑處定位路徑,即「〜/ Views/{1}/{0} .cshtml」。 {1}佔位符指定控制器名稱,{0}表示視圖名稱。

舉例來說,例如對於Home控制器中的索引操作的任何請求都將在「〜/ Views/Home/Index.cshtml」中尋找視圖。

現在如果你想改變這個默認路徑,那麼你必須定義自定義視圖引擎。這裏有一個示例示例,您如何定義自定義視圖引擎並更改默認路徑。

public class MyCustomViewEngine : RazorViewEngine 
{ 

    public MyCustomViewEngine() 
    {   

     ViewLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml" }; 

     MasterLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml"}; 

     PartialViewLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml"}; 

     FileExtensions = new string[] { "cshtml" }; 
    } 
} 

您還需要在Application _Start()事件中使用ASP.Net運行時註冊自定義視圖引擎。

 ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new MyCustomViewEngine()); 
1

控制器代碼是似乎是錯誤的,如果你的控制器名稱爲主頁,然後代碼會是這樣與index行動

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View("~/Views/Homees/index.cshtml"); 
     } 
     public ActionResult Contact() 
     { 
      return View(); 
     } 
    } 

您剛纔使用的控制器名稱爲動作名稱,默認情況下,在視圖文件夾有一個單獨的文件夾爲每個控制器像Home控制器將有一個文件夾名爲Home,並在裏面會有單獨的cshtml文件的每個動作結果,就像我的代碼有兩個動作結果名稱IndexContact所以在Home文件夾下,將會有兩個單獨的cshtml,分別爲index.cshtmlcontact.cshtml。因此,當我們請求index動作時,它將默認爲index.cshtmlContact動作contact.cshtml,但我們可以將我們自己的視圖定位爲像我的index視圖這樣的任何動作,並且它工作正常,您的方法是正確的,但只有問題是控制器名稱和行動名稱,我認爲,嘗試這種方式可能有所幫助

0

簡單隻需去App_Start並打開RouteConfig.cs文件,並將路由控制器「Home」更改爲「Homees」,默認情況下將其設置爲「Home」。如果您將HomeController重命名爲「HomeesController」,則應通過默認路由更改爲rountconfig。檢查下面的圖像

enter image description here

從控制器文件夾中打開 「HomeesController」 後,在這裏你可以查看

public ActionResult Index() 
{ 
    return View(); 
} 

enter image description here

添加動作和添加操作來查看 「Homees」 文件夾

enter image description here