2017-06-02 157 views
0

我有这个mvc路由定义。定义MVC路由和控制器

routes.MapRoute(
      name: "Author", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Author", action = "Index", id = UrlParameter.Optional } 
     ); 

所以我的网址将是这样的:

http://mysitename.com/Author/AuthorName - 这应该使特定作者的所有报价。 http://mysitename.com/Author/Authorname/QuoteID - 这应该带来该作者的特别引用。

我的控制器名称是作者控制器。这是可行的吗?如果是的话,我应该如何定义路线和行动方法来完成这个?

+0

什么你的意思是_没有定义一个action_?而且这个路由定义不会产生这两个url之一 –

+0

那么应该如何定义路由? – Venkat

+0

你有两个action方法,一个接受作者的名字(对于所有与之相关的引号作者)和一个单独的方法来返回一个特定的QuoteID的视图? –

回答

2

您通常会有2个独立的方法,一个用于引用列表,另一个用于具体引用的详细信息。假设他们是

public ActionResult Quotes(string author) 

public ActionResult QuoteDetails(string author, int id) 

在你的路由定义将

routes.MapRoute(
    name: "AuthorQuotes", 
    url: "Author/{author}", 
    defaults: new { controller = "Author", action = "Quotes" } 
); 

routes.MapRoute(
    name: "QuoteDetails", 
    url: "Author/{author}/{id}", 
    defaults: new { controller = "Author", action = "QuoteDetails" } 
); 

而且这两个需要是默认路由之前。

作为一个侧面说明,作者姓名是没有必要的第二个路线,你可以只使用id参数,并考虑使用“塞”路线作者姓名(参见this answer为例

+0

完美的作品。谢谢 – Venkat