Тильда, не разрешающаяся в столбце гиперссылки в ASP.NET 2.0

StackOverflow https://stackoverflow.com/questions/685908

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть ASP.NET приложение, первоначально развернутое на платформе .Net 1.1 Framework на сервере Windows 2000, которое я сейчас использую на сервере Windows 2008, используя 2.0.50727.Мы используем тильду (~) для преобразования в абсолютный путь во многих областях приложения, и это работает для таких вещей, как asp: элементы управления гиперссылками (с тегами запуска на сервере), но для наших связанных элементов управления datagrid, которые используют HyperLinkColumns для создания ссылок на основе значений идентификаторов, возвращаемых из нашей базы данных, тильда записывается на страницу.

Этот код:

HyperLinkColumn oLink = new HyperLinkColumn();
oLink.DataNavigateUrlField = "IdField";
oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

сбрасывает ли это на страницу:

<a href="~/Here171201.aspx">

Что изменилось между версиями IIS или .NET Framework, может быть причиной того, что эта функциональность больше не работает?Тильда определенно разрешилась в версии 1.1 - у меня есть точно такой же код, развернутый на дюжине серверов платформы 1.1 в нашей организации.К сожалению, класс, который задает DataNavigateUrlFormatString, не имеет доступа к Странице, поэтому мне придется выполнить некоторые манипуляции, чтобы вставить страницу.ResolveUrl обходной путь...

Это было полезно?

Решение

Я не знаю о каких-либо изменениях, но я не использую HyperLinkColumns (я предпочитаю элемент управления, который предоставляет столбец Template), поэтому я не искал никаких изменений .

Одна из возможностей в качестве пресловутого лейкопластыря - изменить эту линию:

oLink.DataNavigateUrlFormatString = "~/Here{0}.aspx";

к этому:

oLink.DataNavigateUrlFormatString = Page.ResolveUrl("~/Here{0}.aspx"); 

Если мне не изменяет память, были некоторые проблемы при переходе на Основные страницы и использовании '~' из пользовательских элементов управления, но прошло много времени с тех пор, как я читал что-либо подобное.

Другие советы

Я не думаю, что столбец HyperlinkColumn в Datagrid автоматически преобразует URL-адрес в абсолютный путь.IIRC, the DataNavigateUrlFormatString внутренние вызовы свойства String.Format() только в предоставленном формате.Вы уверены, что это правильно сработало в .NET 1.1?IIRC, .NET 1.1 не имел автоматического разрешения URL на основе тильды.

На мой взгляд, вам следует использовать решение, представленное Стивеном (вызовите Page.ResolveUrl вручную.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top