2012-01-04 88 views
0

我的MVC應用程序(.NET MVC 3)工作。我的默認控制器不工作(.NET MVC)

我想實現,如果用戶離開url路徑(例如http://localhost:12345/),默認控制器被調用來輸出一個默認視圖。所以我註冊了這個Global.asax中

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

     routes.MapRoute(
      "Route1", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Default", action = "Default", id = UrlParameter.Optional } // Parameter defaults 
     ); 
} 

我有一個DefaultController在文件夾「控制器」

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace RyfMvcTestApplication1.Controllers 
{ 
    public class DefaultController : Controller 
    { 
     public ActionResult Default() 
     { 
     return View(); 
     } 
    } 
} 

視圖(Default.cshtml)在查看/默認發現,只是表示歡迎信息。 不幸的是,如果我離開了url路徑,空白頁顯示爲。它只適用於如果我添加「默認」作爲路徑的URL

http://localhost:12345/Default 

我錯過了什麼嗎?

+0

不,我認爲你做得很好!有一件事,儘管我假設你沒有在Global.asax中定義的更多路由如果是這種情況,那麼請添加您的默認路由作爲第一個路由! – GuruC 2012-01-04 12:46:55

+0

不,這是完整的代碼 – AGuyCalledGerald 2012-01-04 12:49:39

回答

2

對不起,我犯了一個非常愚蠢的錯誤,通過插入一個Default.aspx頁面到項目中。默認情況下,當url不包含路徑時,此頁面始終顯示,並且它優先於global.asax的設置:(

+1

好,你發現了錯誤!因爲找到這樣的錯誤總是讓你有點沮喪。 – GuruC 2012-01-05 06:39:28

+0

是的......特別是因爲我應該知道自從問了另一個問題...... – AGuyCalledGerald 2012-01-05 08:53:07

0

我真的不明白你的意思。你正試圖獲得已經內置的東西,並準備在任何新鮮的mvc項目中使用。

當你創建一個新的項目,有利用控制器=「家」,行動=「指數」的缺省路由,並且只可以作爲你打算。

也許這是事實,你既命名控制器和動作是相同的(默認),但我真的不知道,也沒有看到這一點推倒重來。

0

從這個page報價:

如果不提供控制器,控制器參數默認值主頁。如果您不提供操作,則操作參數默認爲值Index。最後,如果你不提供一個id,id參數默認爲一個空字符串。

所以您可以將控制器重命名爲HomeContoller也可以創建一個重定向到您所需的URL裏面default.aspx文件。

+4

您的回答似乎不正確!我的意思是用戶可以將任何控制器設置爲默認值,並將任何操作設置爲默認值,沒有什麼比它必須是主控制器,在你給出的鏈接中,它只是解釋了這個例子的行爲! – GuruC 2012-01-04 12:54:02

+1

對我感到羞恥,我應該改善我的閱讀技能;) – 2012-01-04 16:08:11

4

無法重現您的問題。步驟:

  1. 使用內置嚮導
  2. 在控制器上的文件夾點擊右鍵,選擇添加 - >控制器,並使用DefaultController作爲名稱使用以下內容創建一個新的ASP.NET MVC 3應用程序:

    public class DefaultController : Controller 
    { 
        public ActionResult Default() 
        { 
         return View(); 
        } 
    } 
    
  3. 添加~/Views/Default/Default.cshtml觀點:

    @{ 
        ViewBag.Title = "Default"; 
        Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
    
    <h2>Default</h2> 
    
  4. 更新Global中的RegisterRoutes方法。ASAX,使其看起來就像這樣:

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        routes.MapRoute(
         "Route1", 
         "{controller}/{action}/{id}", 
         new { controller = "Default", action = "Default", id = UrlParameter.Optional } 
        ); 
    } 
    
  5. 命中F5

  6. 內置的Web服務器啓動時,應用程序在使用http://localhost:xxxx/作爲URL的默認瀏覽器中運行,並執行default行動在default控制器上。