2011-12-09 164 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