2017-02-05 118 views
0

當我做@Html.ActionLink("About us", "About", "Home"),應用程序如何知道控制器文件在Controllers\HomeController.cs?我看到控制器文件夾分開,如'Views \ Home','Views \ Booking'等。但是,如何在指定的控制器名稱爲Home時知道要查找Controllers\HomeController.cs?由於visual studio生成的文件,我的代碼完美工作。但是,我想知道它背後的理論是什麼。請解釋一下,謝謝。當我執行ActionLink時,應用程序如何知道控制器類? ASP mvc

這裏是我的路由配置,

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

,這裏是我的HomeController,

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult About() 
    {    
     return View(); 
    } 
} 
+0

一點也沒有「T。它只會生成鏈接'/ Home/About',而不關心該路由的控制器是否存在,如果存在,它來自哪個文件。它確實需要配置路線。 – CodeCaster

+0

@CodeCaster我看,我的'/ home/About'是About.cshtml,這是否意味着它首先加載About.cshtml?出於某種原因,About.cshtml會給出控制器文件名?我已經更新了問題中的路由配置。請給你專家建議。謝謝! – user859385

+0

連接在路由和控制器之間,視圖不起作用,它由控制器決定。在您的/ home/about-case中,控制器由「家」 - 您的路線部分確定。 MVC有一些固定的規則,比如將一個帶有控制器「Home」的路由轉換成一個使用HomeController類的路由(如果存在的話)。您可以在默認路由中看到URL的第一部分組成控制器名稱,第二部分爲操作名稱,最後一部分爲調用操作時使用的參數。 –

回答

1

從本質上講,它是所有.NET MVC這樣做。所以當你給它一個ActionLink時,它知道「Home」是一個名爲About的函數的Controller。

何時該調用該函數來呈現某些東西; DefaultControllerFactory.net mvc使用將足夠啓動以找出給定的控制器缺少單詞「Controller」,因此它將在調用之前附加它。

有我在關於如何重寫DefaultControllerFactory過去使用的一個非常好的指南: https://www.codeproject.com/Articles/599189/DefaultControllerFactory-in-ASP-NET-MVC

這可能會給你什麼引擎蓋下回事感更好:)

+0

謝謝!你的回答和@Dirk Trilsbeek評論幫助我解決了問題!偉大的鏈接知道什麼是在引擎蓋下(: – user859385

相關問題