Тильда не разрешается в HyperLinkColumn в ASP.NET 2.0

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

Этот код:

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

выводит это на страницу:

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

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

2 ответа

Решение

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

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

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

к этому:

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

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

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

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

Другие вопросы по тегам