2012-02-17 55 views
0

我有一個DirectoryController與指數()的ViewResult其顯示在視圖中的以下鏈接:不要在URL顯示動作 - 路由

@Html.ActionLink("My file 1", "Index", "File", new { @id = "123" }, null) <br /> 
@Html.ActionLink("My file 2", "Index", "File", new { @id = "456" }, null) <br /> 
@Html.ActionLink("My file 3", "Index", "File", new { @id = "789" }, null) <br /> 

如果我點擊一個鏈接,我將結束有高達(例如)在URL如下:

http://www.domain.com/File/Index/123

我真的很想有在URL如下:

http://www.domain.com/File/my-file-1

基本上,我想看看在URL中控制器名稱和一個自定義名稱(例如,文件名),而不表示實際的動作ID

無論我單擊的鏈接如何,它們都應該繼續指向FileController的Index()方法,並沿着相應的編號傳遞。

我該怎麼辦?

我應該怎樣創建自定義路線?

感謝

+0

將文件名顯示爲路徑的一部分時,請確保文件名中沒有特殊字符,例如'%'。雖然它們會在URL中轉換,與QueryString參數不同,但它們會使呼叫崩潰,因爲它們無法通過路由進行分析。有關該特定問題的更多詳細信息,請參閱我的回答以及另一篇文章,在此處鏈接此處:http://stackoverflow.com/questions/9123203/asp-net-mvc-passing-a-string-parameter-to -an-action-using-redirecttoaction/9183451#9183451 – Nope 2012-02-17 17:44:54

+0

感謝您的支持 – Vlince 2012-02-17 18:18:34

回答

1

作爲一般概述:

你想要做的就是創建路由映射

如翻譯URL,它是用戶友好的

你需要做一些更新您的控制器/ global.asax

路線示例

context.MapRoute(
       "FileNameMapping", 
       "File/{filename}", 
       new {controller="File", action = "Index" }); 
在你的行動

,你將有類似

Public FileResult Index(string filename){ 
// do your logic for handleling file name 
//and return file 
} 
+0

感謝您的信息。我已將路線添加到Global中的默認路線之上。點擊我的鏈接時,我仍然會得到相同的行爲。我仍然得到正常的網址...控制器/動作/ ID。我錯過了什麼,以獲得控制器/自定義名稱,反過來會帶我到我的Index()方法傳遞ID參數? – Vlince 2012-02-17 18:17:41

+0

@Vince:在閱讀您的問題時,您是否可以從名稱中識別ID? – cpoDesign 2012-02-19 21:31:00

0

如果你將運行在IIS上這一點,而不是卡西尼,您可以使用網址重新寫入達到預期的效果。