2011-08-12 90 views
1

我有下面的格式queryparam超鏈接:超鏈接'?'逃離

<a href="<%= Url.Content("~/Search/Results/" + 
     ViewData["SearchID"] + "?listingID=" + 
     ViewData.Model.ListingID) %>"> 
    See more 
</a> 

顯示了在頁面的源精細但點擊時我結束了:

http://localhost/{Site}/Search/Results/30%3FlistingID=2 

我試着使用ActionLink的幫手:

<%= Html.ActionLink("See more", "Results", "Search", 
     new { 
      id = ViewData["SearchID"], 
      listingID = ViewData.Model.ListingID 
     }, null) %> 

我甚至已經嘗試註冊一個路線具體到這一行動:

routes.MapRoute(
    "SearchResults", // Route name 
    "Search/Results/{id}/{listingID}", // URL with parameters 
    new { controller = "Search", 
      action = "Results", 
      id = UrlParameter.Optional, 
      listingID = UrlParameter.Optional } // Parameter defaults 
); 

我真的很困惑,爲什麼URL顯示在生成的頁面源罰款,但沒有在實際的請求URL一旦點擊。任何輸入?

編輯 的網址正確顯示了在生成的頁面的源代碼:

<a href="/[SITE]/Search/Results/30?listingID=2">See more</a> 

手動輸入上述網址到地址欄工作正常說來也奇怪。真的很困惑。

第二個編輯

的真正原因是網址就是一個問題是,我得到一個錯誤:

A potentially dangerous Request.Path value was detected from the client (?). 

最後編輯

我發現的原因問題。請求來自https到http,並且目標Controller上有一個屬性,將url重寫爲http。 /FacePalm

+0

當你使用'Html.ActionLink'時會發生什麼?我在很多地方都是這樣使用它,我從來沒有遇到過問題。 –

+0

什麼是'Uri' ..? –

+0

@Ronald:當我使用ActionLink的我在以下I得到相同的結果瓦特/鏈路得到相同的超鏈接路徑然而的「http://本地主機/ [SITE] /搜索/結果/ 30%3FlistingID = 2」,在表示地址欄。 –

回答

0

該URL正在轉向您的「?」進入uri編碼值:%3F。發生這種情況的原因是因爲字符串正在被uri編碼。你需要逃避問號。

+0

這不是一個HTML編碼值。這是一個URI編碼值。 –

+0

你說得對。在答案中改變它。 :) – evasilchenko

+0

現在基本上說「它是被編碼的,因爲它被編碼」,並沒有提供一個妥善的解決辦法。:) –

0

UrlHelper.Content是假設一切都是協議,主機和路徑,它確實沒有做查詢變量。

UriBuilder可能會有所幫助。

+0

這似乎與生成鏈接無關,因爲它在頁面源代碼中正確顯示: See more

+0

@Casey:這是不可能的。 –

+0

@Tomalak:哪一部分?頁面網址在頁面源代碼中正確顯示。我很想有一些更直接的錯誤,但... –