Jen

ASP.NET MVC Route的簡單應用筆記

ASP.NET MVC專案下都會有個Global.asax檔案,

都會有這段預設的程式碼,做啥用的就不特別筆記了,

routes.MapRoute(
	"Default",    
	"{controller}/{action}/{id}",                           
	new { controller = "Home", action = "Index", id = "" } 
);

參考ASP.NET MVC Routing Overview (C#)

 

主要是分享在做列表分頁的時候,可以怎麼讓網址更漂亮。

一般做列表頁顯示第一頁時的URL可能是這樣:

2010-08-31_121852[3] (1)

第二頁就會加上QueryString,變成這樣: 
2010-08-31_121903[3] (1)

非常不友善,那我們可以怎麼做呢?

可能你想變成:
2010-08-31_122842

但原本就已經定義好{controller}/{action}/{id},所以這裏的RouteValue 是代表 id=1, 並不是你想要的page=1,所以你要在預設的Route前面再定義一段route Value。特別注意是加在預設的Route前面,因為Route比對是由上往下,先比對到的就先按格式處理。

routes.MapRoute(
    "Experience",
    "Experience/{action}/{page}",
    new { controller = "Experience", action = "Index", page = "1" },
    new 
    { 
        action = @"Index",
        page = @"\d+"
    }
);

因此,Controller這邊就可以用int page這個參數名稱來接值.

// GET: /Experience/
public ActionResult Index(int page)
{
	return View();
}

當然也可以用預設的去接啦, 但是變數名稱就是int id, 變白爛的.

PS. Route的比對是由上往下,如果你把這一段放在預設的Route後面,結果就不太一樣囉。

 

再看另一個筆記。

最近寫了一個Calendar,樣子如下。

2010-08-31_123938

要點「<<」 或 「>>」換月份,Url的表示可以設定成.

http://localhost:9213/Calendar/Index/2014-62010-08-31_134118

那在Global.asax可以這樣設定.

//日期的Route
routes.MapRoute(
        "Calendar",
        "Calendar/Index/{date}/{text}",
        new
        {
            controller = "Calendar",
            action = "Index",
            date = DateTime.Now.ToString("yyyy-MM"),
            text = "fuckOff"
        },
        new
        {
            action = @"Index",
            date = @"(\d{1,4}-\d{1,4})?"
        }
    );

ASP.NET MVC Tutorials
ASP.NET MVC Routing Overview (C#)

0 意見: