2014-12-05 117 views
2

我想有一個像URL鏈接:/職位/後/ 1#評論如何在ASP.NET MVC中通過url傳遞特殊字符?

其中:帖子 - 控制器名稱,郵政 - 動作的名稱,1 - id參數

我使用下面的代碼我查看:

<a href="@Url.Action("Post", "Posts", new { id = @item.PostId + "#comments" })">Comments</a> 

因此,我有:/職位/後/ 1%23comments

怎樣做才能通過 '#' 字符,而不是 「%23」?

回答

2

你正在尋找:

<a href="@Url.Action("Post", "Posts", new { id = item.PostId })#comments" ...></a> 

#是亂碼,所以把它的服務器端(其中Url.Action期待)是指編碼它。如果您希望補充客戶體驗,請不要將其包含在您的Url.Action中(或者創建一個接受片段標識符並輸出未觸及的特殊重載)。

+0

這就是我的問題的答案。謝謝! – 2014-12-05 14:36:24

+2

技術上:「片段標識符」,而不是哈希 – 2014-12-05 14:42:44

+0

@MarcGravell:TomätoTomâto。我想我把它分組給它[JavaScript API](https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash)將其標記爲「散列」(即使它是一個散列+片段) 。但我已經說過了。 ;-) – 2014-12-05 14:50:48

1

對於該數據將成爲動作的一部分,%23是正確的;如果#代表片段 - 它不是「動作」的一部分。在URL中#表示客戶端的片段 - 通常用於通過id跳躍的元素在文檔中(服務器不會看到#後的任何一個網址)

參見:(看網址)

+0

是的,但其實我想跳的元素在文檔...現在的問題是如何做到這一點? – 2014-12-05 14:31:32

+1

@ user1334190 then:那不是「動作」的一部分,因爲動作是服務器端的,而服務器*從不會看到分片*;分別添加'#comments':'href =「@(Url.Action(...))#comments」# – 2014-12-05 14:32:29

+0

href =「@(Url.Action(...))#comments」是一個簡單的解決方案。謝謝! – 2014-12-05 14:35:36

0

您還可以使用Html.ActionLink以及適當的過載(fragment參數),而不是手動建立鏈接。

@Html.ActionLink(
      "Comments", 
      "Post", 
      "Posts", null, null, 
      "comments", // fragment part 
      new { id = @item.PostId }, 
      new { }) 
+0

我知道,謝謝! – 2014-12-05 14:39:42

+0

對於ref ['Html.ActionLink(HtmlHelper,string,string,string,string,string,string,object,object)'](http://msdn.microsoft.com/zh-cn/library/dd460522(v = vs.118).aspx)&['Html.ActionLink(HtmlHelper,string,string,string,string,string,string,RouteValueDictionary,IDictionary )'](http://msdn.microsoft.com/ EN-US /庫/ dd460522(v = vs.118)的.aspx)。 – 2014-12-05 14:42:21