2011-12-09 162 views
0

所以我對如何處理一些MVC路由ASP.NET MVC 3控制器路由

有點困惑我有一個AdminController

public class AdminController : Controller 
{ 
    // 
    // GET: /Admin/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult Users() 
    { 
     return View(); 
    } 
    public ActionResult Books() 
    { 
     return View(); 
    } 

} 

工作正常。所以,我可以去/管理/書籍

這是管理圖書管理員菜單。現在在那裏,我想能夠像

/Admin/Books/ViewBook/10 
or 
/Admin/Books/Add 

類似的東西。我似乎無法理解如何以這種方式傳遞這些東西。 我做了一個控制器

AdminBookController

public class AdminBooksController : Controller 
{ 
    // 
    // GET: /AdminBooks/ 
    public ActionResult List() 
    { 
     return View(); 
    } 

    public ActionResult Add() 
    { 
     return View(); 
    } 
    [HttpGet] 
    public ViewResult BookDetails(Guid guid) 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ViewResult BookDetails(ModifyBook Book) 
    { 
     if (ModelState.IsValid) 
      return View("Book successfully Edited!"); 
     else 
      return View(); 
    } 
} 

}

,但我不希望它是/ AdminBooks我覺得/管理/圖書/動作/參數是好得多。

先謝謝了!

回答

2

如果你想這些URL映射到您的AdminBooks控制器,你需要映射以下路線(順序):

// maps /Admin/Books/ViewBook/{id} to AdminBooksController.BookDetails(id) 
routes.MapRoute(
    "AdminBooks_ViewBook", // Route name 
    "Admin/Books/ViewBook/{id}", // URL with parameters 
    new { controller = "AdminBooks", action = "BookDetails", id = UrlParameter.Optional } // Parameter defaults 
); 

// maps /Admin/Books/{action}/{id} to AdminBooksController.{Action}(id) 
routes.MapRoute(
    "AdminBooks_Default", // Route name 
    "Admin/Books/{action}/{id}", // URL with parameters 
    new { controller = "AdminBooks", action = "List", id = UrlParameter.Optional } // Parameter defaults 
); 

注意:務必默認MVC路由之前把這些映射。

+0

感謝特異性! – Jordan