2009-01-02 99 views
1

我有采取基於用戶名字符串ID參數行動以UrlEncode鏈路ID的可以包括需要編碼的字符,比如「用戶?1」與ASP.NET MVC的HtmlHelper擴展方法

如果我使用ActionLink()來生成鏈接,傳遞字符串而不進行編碼,它會生成如下鏈接:http:\\localhost\controller\action\user?1,並且該操作將作爲id傳遞「user」。

如果我將該字符串傳遞給ActionLink之前,則生成的鏈接爲:http:\\localhost\controller\action\user%253f1,因爲ActionLink將爲您編碼'%'字符。除了這看起來很醜陋之外,它還會在跟蹤我尚未追蹤原因的鏈接時生成HTTP錯誤400 - 錯誤請求。

有沒有什麼辦法可以生成url:http:\\localhost\controller\action\user%3f1

回答

0

如何刪除?字符或用短劃線( - )或下劃線(_)之類的東西代替它?

+0

想法是,url slug實際上是用戶生成的字符串,在當前情況下,它是他們的用戶名。不幸的是,我不能限制允許的字符,因爲它是現有用戶的現有系統。 – Giraffe 2009-02-02 10:54:13

0

你應該看看在Global.asax.cs中文件

增加另一個路線爲您提供方便,在這種情況下,FF。可能工作:

 routes.MapRoute(
      null,        
      "{controller}/{action}/user/{id}", 
      new { controller = "Home", action = "Index" } 
     ); 

我想這是你想要的,爲每個用戶分開的行動,但我建議你使用cookie來達到這個目的。

PS:由於路由試圖從上到下進行匹配,所以請記住將它放在默認路由之上。

0

你可以創建一個jquery插件來檢查所有的鏈接,並用新值替換你需要替換的char。 並將此插件應用於所有ActionLinks後

相關問題