【问题标题】:ASP.NET MVC 3 Controller routingASP.NET MVC 3 控制器路由
【发布时间】:2012-08-29 00:22:35
【问题描述】:

所以我对如何处理一些 MVC 路由有点困惑

我有一个管理员控制器

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

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

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

}

效果很好。所以我可以去 /Admin/Books

这是管理图书的管理菜单。现在在那里我希望能够像这样路由

/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 我觉得 /Admin/Books/Action/Param 更好。

提前致谢!

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 url-routing


    【解决方案1】:

    如果您希望这些 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 路由之前。

    【讨论】:

      【解决方案2】:

      考虑创建一个管理区域并将 BookController 添加到该区域。有关演练,请参阅以下链接:

      http://msdn.microsoft.com/en-us/library/ee671793.aspx

      【讨论】:

        【解决方案3】:

        您可以在 Global.asax 文件中添加新路由。

        看到这个问题:

        Use MVC routing to alias a controller

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 2013-09-29
          • 2011-03-06
          • 2018-02-20
          相关资源
          最近更新 更多