Получить текущий фрагмент в Route, ASP.net MVC - PullRequest
3 голосов
/ 09 июня 2011

Можно ли получить текущий фрагмент из маршрута, который был создан по ссылке действия.Вот как я получаю действие от маршрута.

string currentAction = requestContext.RouteData.Values ​​["action"] как строка ??"index";

Могу ли я сделать что-то похожее на это?

string currentFragment = requestContext.RouteData.Values ​​["Fragment"] в виде строки ??"";

Ответы [ 2 ]

13 голосов
/ 09 июня 2011

Нет, ты не можешь сделать ничего подобного.Фрагмент (все, что следует после знака # в URL-адресе) никогда не отправляется на сервер браузером, поэтому сам факт разговора о получении серверной части фрагмента URL-адреса просто не имеет смысла.

Таким образом, если у вас есть следующий URL: http://example.com/foo/bar?key1=value1#abc сервер никогда не сможет получить abc просто потому, что клиент никогда не отправит его.

3 голосов
/ 09 июня 2011

Как уже указывалось, это невозможно.Фрагменты документа (строка после хэша, как вы ее называете) предназначены для браузеров только для правильного позиционирования области просмотра.Они не имеют никакого значения для сервера и поэтому не передаются туда.

Однако существует обходной путь, который вы можете использовать.Повторите фрагмент как часть вашего URL, чтобы сделать его доступным для сервера.

Посмотрите на постоянную ссылку на ответы на этот вопрос.Например, ссылка на мой ответ выглядит следующим образом:

http://stackoverflow.com/questions
/6285833/get-current-fragment-in-route-asp-net-mvc/6286097#6286097

Посмотрите, как значение 6286097 дублируется в качестве последнего параметра маршрута.Это намеренно.Вы также можете использовать эту технику.

PS Фрагмент должен указывать на идентификатор в документе (идентификатор некоторого HTML-элемента).По крайней мере, в XHTML только идентификаторы работают как фрагменты.Допустимые идентификаторы могут не начинаться с цифры, поэтому вместо #6286097 используйте что-то вроде #answer-6286097.

PS # 2.Не используйте хитрость JavaScript, чтобы обойти это ограничение.Базовая функциональность и дизайн сайта должны работать без JavaScript - не слушайте тех, кто говорит вам иначе.Фрагменты очевидно принадлежат к основному ящику с инструментами.Используйте JavaScript только для продвинутой интерактивности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...