Тильда не разрешается в HyperLinkColumn в ASP.NET 2.0 - PullRequest
0 голосов
/ 26 марта 2009

У меня есть приложение 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 ]

3 голосов
/ 26 марта 2009

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

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

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

к этому:

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

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

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

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

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

...