Как бороться со специальными символами в HyperLink.NavigateUrl в ASP.NET? - PullRequest
2 голосов
/ 09 марта 2009

В настоящее время у меня возникают проблемы с выяснением того, как обрабатывать путь к файлу (динамически), передаваемый в свойство NavigateUrl элемента управления HyperLink.

Допустим, я пытаюсь сослаться на файл с именем jäynä.txt в корне C:.
Передача "file:///C:/jäynä.txt" результата в ссылку на file:///C:/jäynä.txt, как и HttpUtility.UrlPathEncode("file:///C:/jäynä.txt").

Замена ä** s на **%E4, которая дает строку "file:///C:/j%E4yn%E4.txt", дает рабочую ссылку на file:///C:/jäynä.txt, но я не смог найти способ сделать замену, не определяя это непосредственно. С Replace("ä", "%E4"), например.

Есть ли способ автоматически обрабатывать строку пути к файлу, чтобы HyperLink отображал ее правильно, без указания вручную, какие символы заменить в строке?

Дополнительное примечание:
Может быть способ обойти эту проблему, уточнив кодировку символов, в которой отображается страница, поскольку отладка показывает, что HyperLink по крайней мере сохраняет строку "file:///C:/jäynä.txt" без изменений, но каким-то образом искажает ее во время рендеринга.
Однако, похоже, это имеет место только при рендеринге NavigateUrl, потому что другие компоненты, а также Text -войство HyperLink все вполне способны сделать символ ä неизменным.

Ответы [ 4 ]

4 голосов
/ 21 мая 2012

Свойство NavigateUrl Гиперссылки будет кодировать символы Юникода в URL.

Вместо этого вы можете установить свойство атрибута href Гиперссылки следующим образом:

hyperlink1.Attribute("href") = "file:///C:/jäynä.txt"
1 голос
/ 23 мая 2010

Не используйте управление HyperLink. Вместо этого используйте элемент управления HtmlAnchor. Это решит вашу проблему. Я не знаю, почему Microsoft спроектировала так.

1 голос
/ 09 марта 2009

Это связано с тем, что браузер начинает интерпретировать путь, обычно отдельные лица избегают использования таких символов, как символы в URL-адресах страниц.

В вашем случае, я полагаю, вы столкнулись с лучшим сценарием, поскольку я не знаю ни одного способа изменить поведение HttpUtility и / или свойства NavigateUrl. По крайней мере, без создания настраиваемого элемента управления для него.

0 голосов
/ 19 декабря 2012

Спасибо! Пост, использующий атрибуты, решил мою проблему. В моем случае это было

HyperLink6.Attributes["href"] = "http://høgstedt.danquah.dk/";

Проблема использования специальных датских символов в URL, похоже, беспокоила многих программистов - поиск предоставляет несколько очень сложных подходов. Это ПРОСТО, и ПРОСТО РАБОТАЕТ. Итак, еще раз, спасибо

...