2010-05-13 43 views
0

我使用asp.net mvc版本1.0,並且我在URL中的一些參數有問題!Urls參數編碼不正確!

我的網址看起來像這樣(http://localhost:2282/Tags/PostList/c#

routes.MapRoute(
      "TagsRoute", 
      "Tags/PostList/{tag}", 
      new { controller="Tags",Action="PostList",tag = "" } 
     ); 

實際上的問題是,標籤放慢參數不編碼等辛博爾#被忽略!

我正在使用動作鏈接,但可能與版本1.0不直接編碼參數!

<%=Html.ActionLink(itemtags.Tags.TagName, 
           "PostList","Tags", 
          new { tag = itemtags.Tags.TagName }, 
          new { style = "color:red;" })%> 

有了這個動作鏈接只有空白編碼正確,實際上asp.net mvc成爲asp.net%20mvc,它工作正常!但是C#是沒有編碼:(

所以我嘗試使用Server.UrlEncode,並且實際上也發生了一些東西!

逸岸C#成爲C%2523,但它不會被再次正確,因爲十六進制!?排名是%23

你有一些解決方案????路線約束上

感謝

回答

0

你一些進展編碼的雙25%是在%符號,所以:

「#」 - >%23

「%23」 - >%2523

這是很難搞清楚的數據是否已被編碼與否,尤其是當你把實用方法進入死循環(因爲他們可以調用還編碼數據的其他實用方法)。我發現的唯一解決方案就是爲我已經編碼一次的數據使用標記類,而不是將我的文本作爲相同的數據類型傳遞到任何地方(例如String)。

任何對數據進行編碼的方法都不會帶一個String並返回一個String。它接受一個String並返回一個包含String(編碼)的對象。

+0

是的,實際上它是雙重編碼。但爲什麼??它使用空格而不是simbol進行正確的編碼!所以這是正常的,如果我mae Server.UrlEncode我得到一個雙重編碼:( – Ivan90 2010-05-13 20:07:32

+0

Server.UrlEncode(「c#」)返回「c%23」的權利?有人在你的第二次調用UrlEncode商業框架往往有兩種口味,一種是爲你編碼,另一種是沒有編碼,它是內部框架,幾乎總是會做兩次,或者兩次做同樣的事情。 我想盡量不編碼它。如果這不起作用,那麼您需要查看自己的代碼,並將所有的調用都發送到應用程序的同一層的Server.UrlEncode。否則,您將永遠播放whack-a-URL。 – Jason 2010-05-13 21:49:54