2017-06-02 200 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