波浪线无法在 ASP.NET 2.0 的 HyperLinkColumn 中解析

发布于 2024-07-15 18:24:25 字数 710 浏览 9 评论 0原文

我有一个 ASP.NET 应用程序,最初部署到 Windows 2000 服务器上的 .Net 1.1 Framework,现在我在 Windows 2008 Server 上使用 2.0.50727。 我们使用波浪号 (~) 来解析应用程序的许多区域中的绝对路径,它适用于诸如 asp:hyperlink 控件(带有在服务器标签中运行)之类的东西,但对于我们使用 HyperLinkColumns 来创建的绑定数据网格控件基于从我们的数据库返回的 ID 值的链接,波形符将被写入页面。

此代码:

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

正在将其转储到页面:

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

IIS 或 .NET Framework 版本之间发生的更改可能会导致此功能不再工作? 波浪号肯定在 1.1 中得到解决 - 我在我们组织中的十几台 1.1 框架服务器上部署了完全相同的代码。 不幸的是,设置 DataNavigateUrlFormatString 的类无法访问该页面,因此我必须做一些混杂工作来插入 Page.ResolveUrl 解决方法...

I have an ASP.NET application originally deployed to a .Net 1.1 Framework on Windows 2000 server which i'm now using on a Windows 2008 Server using 2.0.50727. We use the tilde (~) to resolve to an absolute path in many areas of the application and it works for things like asp:hyperlink controls (with run-at server tags), but for our bound datagrid controls which are using HyperLinkColumns to create links based on ID values returned from our database, the tilde is getting written to the page.

This code:

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

is dumping this to the page:

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

What changed between versions of IIS or .NET Framework could be causing this functionality to no longer work? The Tilde was definitely resolving in 1.1 - I have the exact same code deployed on a dozen 1.1 Framework servers in our organization. Unfortunately, the class that sets the DataNavigateUrlFormatString doesn't have access to the Page, so I'll have to do some kludging to insert the Page.ResolveUrl work around...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情场扛把子 2024-07-22 18:24:25

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

作为众所周知的创可贴,一种可能性是将这一行更改

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

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

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

I'm not aware of anything changing, but I don't use HyperLinkColumns (I prefer the control which the Template column provides) so I've not looked for any changes .

One possibility as a proverbial band aid is to change this line:

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

to this:

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

If memory serves there was some issues when going to Master Pages and using the '~' from User Controls, but it's been a while since I read anything like that.

孤单情人 2024-07-22 18:24:25

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

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

I don't think that the HyperlinkColumn of a Datagrid automatically resolves the URL into an absolute path. IIRC, the DataNavigateUrlFormatString property internally calls String.Format() only on the supplied format. Are you sure this worked correctly on .NET 1.1? IIRC, .NET 1.1 did not have tilde-based automatic URL resolution.

In my opinion, you should use the solution presented by Stephen (call Page.ResolveUrl manually.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文