2017年9月23日 星期六

[MVC] Routing Engine - multiple parameters (3)

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            // 忽略所有 *.axd 的網址路徑
            // 在預設 RegisterRoutes 方法中的 IgnoreRoute 用來定義 不要透過 Routing 處理的網址
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",                    // 路由名稱:唯一名稱對應唯一的 Route
                url: "{controller}/{action}/{id}",  // URL 及參數:通過簡單的模式,將 URL 解析具有意義的字段
                defaults: new                       // 參數預設值
                {
                    controller = "Home",            // 默認值:提供與對應字段的默認值
                    action = "Index",
                    id = UrlParameter.Optional
                    // constraints                  // 約束:一系列的約束應用到 URL 模式上
                                                    //       用來嚴格定義 URL 對應 Route
                } 
            );
        }
    }
    • Step 2. 創建 Controller 如下:
      • 預設 Routing Engine 只有 id = UrlParameter.Optional ,因此 Parameters 只有 1 個 id
      • 如果將 int? id 改為 int? other,Routing Engine 沒有註冊 other 的 Parameters ,因此不會動作
    public class UserController : Controller
    {
        public ActionResult UserName(int? id)
        {
            ViewBag.myid = id;
            return View();
        }
    }
    • Step 3. Routing Engine 中註冊新的 Routing
            routes.MapRoute(
                name: "MultiParam",                    // 路由名稱:唯一名稱對應唯一的 Route
                url: "{controller}/{action}/{age}/{area}",  // URL 及參數:通過簡單的模式,將 URL 解析具有意義的字段
                defaults: new                       // 參數預設值
                {
                    controller = "Home",            // 默認值:提供與對應字段的默認值
                    action = "Index",
                    age = UrlParameter.Optional,
                    area = UrlParameter.Optional
                    // constraints                  // 約束:一系列的約束應用到 URL 模式上
                    //       用來嚴格定義 URL 對應 Route
                }
            );
    •  Step 4. Controller 加入 UserInfo
      • 輸入下列網址都是可以接收到訊息
        public ActionResult UserInfo(int? age, string area)
        {
            ViewBag.myage = age;
            ViewBag.myarea = area;
            return View();
        }

沒有留言:

張貼留言