2009-03-09 3 views
2

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

Предположим, что я пытаюсь обратиться к файлу с именем 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 отображал ее правильно, без мануального перечисления каких символов заменить в строке?

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

ответ

1

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

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

+0

Нет, я не верю, что это браузер. Я только что проверил источник страницы в первом случае, а ссылка href - href = "file: /// C: /j%c3%a4yn%c3%a4.txt", предполагая, что сервер передал ее в первое место. Вы можете быть правы на усложнении. – vipirtti

+0

Это может косвенно быть браузером, основанным на чем-то в BrowserCaps или чем-то подобным, чтобы отобразить его в системе. Независимо от того, значения, которые вы указываете NavigateUrl, должны быть предварительно очищены. Это задокументировано, поскольку он автоматически не делает ничего с UrlEncode. –

1

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

4

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

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

hyperlink1.Attribute("href") = "file:///C:/jäynä.txt" 
+0

Правильный синтаксис: 'hyperlink1.Attributes [" href "] =" file: /// C: /jäynä.txt "' –

+1

Вы можете использовать фигурные скобки, если используете vb.net –

0

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

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

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

+1

Не публикуйте ответ только на скажи спасибо. Просто комментариев достаточно. И повышенная ценность еще более оценена – Steve

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

  • Нет связанных вопросов^_^