2012-06-18 94 views
3

我有一個名爲Diary的控制器,其操作名爲Viewasp.net mvc - 如何在路由中配置默認​​參數

如果我接收的URL的形式「日記/ 2012/6」我希望它調用View行動year = 2012和month = 6

如果我的形式接收的URL「日記「我希望它通過year = [當前年份]和month = [當前月份號碼]調用View行動。

我該如何配置路由?

回答

2

在你的路線,你可以使用以下命令:

routes.MapRoute(
       "Dairy", // Route name 
       "Dairy/{year}/{month}", // URL with parameters 
       new { controller = "Dairy", action = "Index", year = DateTime.Now.Year, month = DateTime.Now.Month }); 

如果不能提供一年/月,當前值將被髮送。如果提供它們,那麼這些值將被該路線使用。

  • /乳品/ - >年= 2012,月= 6
  • /乳品/ 1976/04 - >年= 1976年,月= 4

EDIT

除下面的評論外,這是用於使用上述標準創建新項目的代碼。

的Global.asax

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

    routes.MapRoute(
     "Default", // Route name 
     "Dairy/{year}/{month}", // URL with parameters 
     new { controller = "Dairy", action = "Index", year = DateTime.Now.Year, month = DateTime.Now.Month } // Parameter defaults 
    ); 

} 

DairyController

public ActionResult Index(int year, int month) 
{ 
    ViewBag.Year = year; 
    ViewBag.Month = month; 
    return View(); 
} 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

Month - @ViewBag.Month <br/> 
Year - @ViewBag.Year 

結果:

  • /乳製品/ 1976年/ 05 - >輸出1976年一年,5月
  • /- >輸出2012年6月分
+0

如果我不提供URL中的參數,我會得到舊的'參數字典包含空條目'schtick。 – David

+0

@大衛 - 你有其他路線可能會與這一個?我剛剛使用上述方法創建了一個新項目,並且與參數字典沒有任何問題。 – Tommy

+0

哦,有趣。我會刪除我的其他路線並檢查。 – David

2
routes.MapRoute(
    "DiaryRoute", 
    "Diary/{year}/{month}", 
    new { controller = "Diary", action = "View", year = UrlParameter.Optional, month = UrlParameter.Optional } 
); 

和控制器動作:

public ActionResult View(int? year, int? month) 
{ 
    ... 
} 
+0

如果我沒有在URL中提供的參數,我得到舊的'參數字典包含空條目'schtick。 – David

+0

你有沒有注意到我是如何在action signature =>'int?'而不是'int'中聲明參數爲可爲空的整數?你做了同樣的事情嗎? –

+0

對不起,我不好,你說得對。我正在標記Tommy的答案,因爲默認值的設置是在路由中處理的,我更喜歡。謝謝。 – David