Tilde无法在ASP.NET 2.0中的HyperLinkColumn中解析

时间:2009-03-26 13:56:22

标签: asp.net hyperlink tilde

我有一个最初部署到Windows 2000服务器上的.Net 1.1 Framework的ASP.NET应用程序,我现在在使用2.0.50727的Windows 2008 Server上使用它。我们使用波浪号(〜)解析应用程序的许多区域中的绝对路径,它适用于asp:超链接控件(带有run-at服务器标签),但是对于使用HyperLinkColumns创建的绑定数据网格控件基于从我们的数据库返回的ID值的链接,代字号被写入页面。

此代码:

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

将此转储到页面:

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

IIS或.NET Framework版本之间的更改可能导致此功能不再起作用? Tilde肯定会在1.1中解决 - 我在组织中的十几个1.1 Framework服务器上部署了完全相同的代码。不幸的是,设置DataNavigateUrlFormatString的类无权访问Page,所以我必须做一些kludging来插入Page.ResolveUrl工作......

2 个答案:

答案 0 :(得分:3)

我不知道有什么变化,但我不使用HyperLinkColumns(我更喜欢Template列提供的控件),所以我没有找到任何变化。

作为众所周知的乐队援助的一种可能性是改变这一行:

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

到此:

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

如果内存服务,那么在访问母版页并使用用户控件中的“〜”时会出现一些问题,但是我已经阅读了一段时间了。

答案 1 :(得分:1)

我认为Datagrid的HyperlinkColumn不会自动将URL解析为绝对路径。在IIRC中,DataNavigateUrlFormatString属性仅在提供的格式内部调用String.Format()。你确定这在.NET 1.1上运行正常吗? IIRC,.NET 1.1没有基于波浪号的自动URL解析。

在我看来,你应该使用Stephen提出的解决方案(手动调用Page.ResolveUrl。)