2009-03-26 2 views
0

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

Этот код:

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 ...

+0

Что тильды решимость в Windows? Я не использовал его много лет назад в unix, когда ссылался на домашний каталог пользователя. – ahockley

+0

в asp.net он должен разрешить абсолютный путь, где установлен виртуальный каталог или приложение - таким образом разработчику не нужно знать, будут ли они устанавливать приложение как: http: // Server/App или http: // Сервер/сайт –

ответ

3

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

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

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

к этому:

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

Если память была несколько проблем при переходе к мастер-страницам и с помощью " ~ 'из User Controls, но прошло некоторое время с тех пор, как я прочитал что-то подобное.

1

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

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