2010-07-09 66 views
1

不幸的是,我需要接受其中包含&的路由參數。我有這個路由定義。 id參數有時會有一個&,就像這個X & Y001一樣。通過&作爲路由參數的一部分

 routes.MapRoute(
      "AffiliateEdit", 
      "Admin/EditAffiliate/{*id}", 
      new { controller = "UserAdministration", action = "EditAffiliate", id = ""} 
     ); 

我試着用下面的方法解決這個問題,但是他們都沒有工作。所有這些導致瀏覽器中出現HTTP 400錯誤請求錯誤。

<a href="/Admin/EditAffiliate/<%= a.CustomerID.Replace("&", "%26") %>">Edit</a> 

這給了我<a href="/Admin/EditAffiliate/X%26Y001">Edit</a>

<%= Html.RouteLink("Edit", "AffiliateEdit", new { id = a.CustomerID }) %> 

這給了我<a href="/Admin/EditAffiliate/X&amp;Y001">Edit</a>

<%= Html.RouteLink("Edit", "AffiliateEdit", new { id = Url.Encode(a.CustomerID) }) %> 

這給了我<a href="/Admin/EditAffiliate/X%2526Y001">Edit</a>

+0

爲什麼你需要傳遞&作爲ID的一部分? – 2010-07-09 14:52:35

+0

,因爲ID已經設置,我不能對他們做任何事情 – MHinton 2010-07-09 15:00:56

回答

1

我能想到的(這是一個「骯髒的唯一的事情「解決方案)是編碼&自己。例如類似## 26 ##的東西。 請確保檢查解碼算法只解碼& ID,而不是一些恰好包含## 26 ##的ID。

取決於db大小的更好的解決方案是更改數據庫中的違規id。

+0

謝謝。這是一個醜陋的修復,但它的工作原理。 – MHinton 2010-07-09 16:45:56

相關問題