Pergunta

Tenho uma aplicação ASP.NET originalmente implantado em um .Net 1.1 Framework no servidor Windows 2000 que eu estou usando agora em um Windows 2008 Server utilizando 2.0.50727. Nós usamos o til (~) para determinação de um caminho absoluto em muitas áreas de aplicação e funciona para coisas como asp: controles de hiperlink (com run-de tags do servidor), mas para os nossos controles DataGrid que estão usando HyperLinkColumns para criar ligações com base em valores de ID devolvido do nosso banco de dados, o til está sendo escrito para a página.

Este código:

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

é dumping isso para a página:

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

O que mudou entre as versões do IIS ou .NET Framework poderia estar causando essa funcionalidade para não funcionam mais? O til foi definitivamente resolver em 1.1 - Eu tenho exatamente o mesmo código implantado em uma dúzia de 1,1 servidores Framework em nossa organização. Infelizmente, a classe que define o DataNavigateUrlFormatString não tem acesso à página, então eu vou ter que fazer alguma kludging para inserir o trabalho Page.ResolveUrl redor ...

Foi útil?

Solução

Eu não estou ciente de qualquer coisa a mudar, mas eu não uso HyperLinkColumns (eu prefiro o controle que a coluna Modelo fornece) para que eu não olhei para quaisquer alterações.

Uma possibilidade como um band-aid proverbial é mudar esta linha:

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

a esta:

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

Se a memória serve, houve alguns problemas quando vai Páginas Mestre e usando o '~' de controles de usuário, mas tem sido um tempo desde que eu li nada parecido.

Outras dicas

Eu não acho que o HyperlinkColumn de um Datagrid resolve automaticamente o URL para um caminho absoluto. IIRC, a propriedade DataNavigateUrlFormatString chama internamente String.Format() apenas no formato fornecido. Tem certeza que isso funcionou corretamente em .NET 1.1? IIRC, .NET 1.1 não tinha til baseada em resolução URL automático.

Na minha opinião, você deve usar a solução apresentada por Stephen (Page.ResolveUrl chamada manualmente.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top