在 WebForms 页面中使用 Url.Content 会错误地解析波浪号

Posted

技术标签:

【中文标题】在 WebForms 页面中使用 Url.Content 会错误地解析波浪号【英文标题】:Using Url.Content from within a WebForms page incorrectly resolves the tilde 【发布时间】:2014-09-04 16:26:56 【问题描述】:

很久以前,我们将 MVC 1.0 添加到现有的 ASP.NET 2.0 WebForms 站点中,并且在升级期间,我们使 MVC 的 UrlHelper 可用于我们现有的 WebForms 代码。这意味着在我们的 WebForms 代码中,我们可以执行以下操作:

<%= Url.Content("~/this/is/nice") %>

输出网址

mysite.com/this/is/nice

这很好,效果很好。

快进到最近,我们正在寻找将我们的应用程序移动到新家(新服务器),而上述功能现在出现问题:

<%= Url.Content("~/this/is/nice") %>

现在输出

mysite.com/webforms/location/this/is/nice

好像物理位置是应用程序根目录 - 我不知道为什么并且在我的开发机器上重新创建它没有成功。

有没有人知道这可能是什么原因?在过去的几天里,我一直被困在这个问题上,几乎没有想法。我现在唯一的一线希望是问题发生在我同事的环境中,所以这绝对是我们可以重现的问题。

更新:它不会发生在所有 WebForms 页面上 - 只是某些页面,到目前为止我注意到的唯一不同特征是它发生在正在进行一些 Url 重写的页面上。

【问题讨论】:

“我们使 MVC 的 UrlHelper 可用于我们现有的 WebForms 代码”您是如何做到的?它是来自 MVC 的真正 UrlHelper,还是您基本上重新创建了它的功能? 我们刚刚将一个“Url”属性添加到我们所有的 WebForms 继承自的基本页面,并且该属性将在第一次使用时启动一个 UrlHelper 实例。 【参考方案1】:

我会改用 MVC 方法:

<%= Url.Content("~/this/is/nice") %>

到执行相同操作的 Web 窗体方法之一:

<%#ResolveClientUrl("~/this/is/nice")%>
<%#ResolveUrl("~/this/is/nice")%>

ResolveUrl 返回相对于站点根目录的路径,而 ResolveClientUrl 返回相对于当前页面的路径。

【讨论】:

嗯,很有趣。感谢您的建议,但我们已经找到了解决方法。不过,我仍然想找到问题的根源。它“感觉”像是配置问题或未安装某些补丁......

以上是关于在 WebForms 页面中使用 Url.Content 会错误地解析波浪号的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx

在 asp net 框架(webforms)中使用 microsoft api 登录

ViewBag 未在混合 Webforms/MVC 项目中声明

获取WebForms中所请求页面的实际上次修改日期

UpdatePanel中点击按钮 Session过期跳转页面相关问题:Sys.WebForms.PageRequestManagerParserErrorException:无法分析从服务器收到的消

Sys.WebForms.PageRequestManagerParserErrorException