我有一个最初部署到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工作......
答案 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
。)