【问题标题】:Tilde not resolving in HyperLinkColumn in ASP.NET 2.0波浪号未在 ASP.NET 2.0 的 HyperLinkColumn 中解析
【发布时间】:2010-10-15 17:08:59
【问题描述】:

我有一个最初部署到 Windows 2000 服务器上的 .Net 1.1 框架的 ASP.NET 应用程序,我现在正在使用 2.0.50727 的 Windows 2008 服务器上使用它。我们使用波浪号 (~) 来解析应用程序的许多区域中的绝对路径,它适用于诸如 asp:hyperlink 控件(带有 run-at server 标签)之类的东西,但适用于使用 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 框架服务器上部署了完全相同的代码。不幸的是,设置 DataNavigateUrlFormatString 的类无权访问页面,所以我必须做一些事情来插入 Page.ResolveUrl 解决方法...

【问题讨论】:

  • 波浪号在 Windows 中解析为什么?自从多年前在 unix 上引用用户的主目录时,我就没有真正使用过它。
  • 在 asp.net 中它应该解析为虚拟目录或应用程序安装到的绝对路径 - 这样开发人员不需要知道他们是否要安装应用程序: Server/AppServer/Site

标签: asp.net hyperlink tilde


【解决方案1】:

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

作为众所周知的创可贴的一种可能性是改变这条线:

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

到这里:

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

如果没记错的话,在转到母版页并使用用户控件中的“~”时会出现一些问题,但我已经有一段时间没有读到类似的东西了。

【讨论】:

    【解决方案2】:

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

    在我看来,您应该使用斯蒂芬提出的解决方案(手动拨打Page.ResolveUrl。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 2016-09-03
      • 2019-07-07
      • 2019-04-09
      • 1970-01-01
      • 2014-09-04
      相关资源
      最近更新 更多