2014-12-05 1 views
2

Я хочу иметь ссылку URL-адрес, как:/сообщения/сообщение/1 # комментариевКак передать специальный символ через url в ASP.NET MVC?

Где: Сообщения - имя контроллера, сообщение - имя действия, 1 - параметр ID

Я использую следующий код в моем Вид:

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

в результате у меня есть:/Сообщения/Post/1% 23comments

Что делать, чтобы передать символ '#' вместо "% 23"?

ответ

2

вы ищете:

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

# для хэша, так, чтобы отправить его на стороне сервера (который Url.Action ожидает) означает, что кодирующая его. Если вы хотите дополнить опыт работы с клиентами, не включайте его в свой Url.Action (или создайте специальную перегрузку, которая принимает идентификатор фрагмента и выводит его не тронутым).

+0

Это ответ на мой вопрос. Благодаря! –

+2

Технически: «идентификатор фрагмента», а не хэш –

+0

@MarcGravell: Tomäto Tomâto. Я думаю, что я группирую его с помощью JavaScript API (https://developer.mozilla.org/en-US/docs/Web/API/URLUtils.hash), называет его «хешем» (хотя его хэш + фрагмент) , Но я переформулировал это. ;-) –

1

для этих данных как составная часть действие, %23 является правильным; если # представляет фрагмент - , он не является частью «действия». А в URL # обозначает стороне клиента фрагмент - как правило, используется для перехода к элементу в документе, id (сервер никогда не видит ничего после # в URL)

Смотрите также: (посмотреть на URL)

+0

Да, но на самом деле я хотел бы перейти к элементу в документе ... Вопрос в том, как это сделать? –

+1

@ user1334190 то: это не часть «действия», так как действие является серверным, а сервер * никогда не видит фрагментов *; добавьте '# comments' отдельно:' href = "@ (Url.Action (...)) # comments" ' –

+0

href =" @ (Url.Action (...)) # comments "является простым решением. Благодаря! –

0

Вы также можете использовать Html.ActionLink с соответствующим параметром oveload (fragment) вместо того, чтобы строить ссылку вручную.

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

Я знаю это, спасибо! –

+0

Для ref ['Html.ActionLink (HtmlHelper, строка, строка, строка, строка, строка, строка, объект, объект)'] (http://msdn.microsoft.com/en-us/library/dd460522 (v = vs.118) .aspx) & ['Html.ActionLink (HtmlHelper, string, string, string, string, string, string, RouteValueDictionary, IDictionary )'] (http://msdn.microsoft.com/ ан-нас/библиотека/dd460522 (v = vs.118) .aspx). –

Смежные вопросы