2012-11-29 62 views
3

我知道這已經被問過,但我真的很困惑MVC中的路由配置的概念 - 特別是從URL中刪除控制器名稱和/或動作名稱。使用MVC路由從URL中刪除控制器和動作

在我的網頁上,我有一個名爲「Sidebar」的局部視圖,它使用自己的控制器(SidebarController)。

在側邊欄的局部視圖,我有以下的ActionLink:

@Html.ActionLink("December-2012", "Archive", new { id = "December-2012" }) 

當鏈路建立,讀取網址爲

http://localhost/Sidebar/Archive/December-2012 

我的問題是有出現的「側邊欄」部分在URL中 - 此控制器在技術上並非用於任何導航的;它只是用來構建局部視圖。相反,我想要的網址爲:

http://localhost/Archive/December-2012 

我試圖在ActionLink的指定控制器,但這只是導致

http://localhost/Archive/Archive/December-2012 

可能有人請解釋(在傻瓜而言)我如何配置這樣當/ Archive存放在URL的末尾時,它知道用Index(id)動作調用ArchiveController(比方說)。

在此先感謝您,並道歉提出之前已被覆蓋的問題 - 正如我剛纔所說的,我只是在爲路線圖的整體概念而努力。

回答

2

不完全確定你在這裏做錯了什麼。也許還包括第二個網址的代碼。

你可以使用Html.ActionLink方法的this overload

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    Object routeValues, 
    Object htmlAttributes 
) 

你會使用這樣的:

@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive", 
       new { id = "December-2012"}, null); 

將產生以下網址:

http://localhost/Archive/Index/December-2012 

更新:

基於您的評論,你需要你的默認路由上面這條路線:

而且同樣的動作鏈接應該映射到這個網址:

@Html.ActionLink("December-2012(ThisIsLinkText)", "Index", "Archive", 
       new { id = "December-2012"}, null); 

記住路徑必須是默認以上路線。

然後,這個URL應該工作:

http://localhost/Archive/December-2012 
+0

這非常接近 - 我曾嘗試過載,但它創建了一個新問題,即在URL中出現「索引」操作。理想情況下,我希望只有/ Archive/{id}而不是/ Archive/{action}/{id},然後讓路線圖「知道」它必須調用Index(id)它在URL中指定。 – user1861826

+0

@ user1861826啊我明白了。你的問題不是很清楚。 – gideon

+0

@ user1861826我更新了我的答案。 – gideon

0

編輯,拉昇指數空白動作:

@Html.ActionLink("December-2012", "", "Archive", new { id = "December-2012" }, null) 

可能有人請解釋(在傻瓜而言)我如何配置 路由,以便當/檔案放在URL的末尾時,它知道 調用ArchiveController(比方說)索引(id)操作?

默認路由應該這樣做。這是默認的路徑:

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

這裏會發生什麼事,就是當你只是在http://localhost/鍵入URL它運行路線,並注意到有沒有指定控制器/動作,所以它進入默認的是「主頁「,並運行」索引「的默認操作。

你可以在你的RouteConfig(或Global.asax如果您正在使用MVC3)添加默認路由之上的Archive路線(爲例):

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

這將觸發每次您的網址開始像http://localhost/archive時間

希望能讓它更清晰。

+0

您提到的第一個重載不存在。沒有'Html.ActionLink(this,string,string,string,object)'。請參閱[msdn](http://msdn.microsoft.com/zh-cn/library/dd505040(v = vs108).aspx)。 – gideon

+0

@rudeovski ze熊謝謝你對路線的解釋 - 幫助你清理一些事情。對於我在這個網站上的第一篇文章,我很快被大家迴應! – user1861826

+0

@gideon對不起,錯過了最後一個'null'。現在編輯 – jzm

相關問題