【发布时间】:2018-08-24 06:10:47
【问题描述】:
我们正在努力将旧的 ASP.Net 应用程序迁移到云端,为此我们做了几件事,还更新了应用程序以使用更新的 .net 框架。
现在我们面临一个奇怪的问题,在应用程序中,一个链接是从数据库中的数据创建的。 html:
<asp:HyperLink ID="linkProjectFolder" CssClass="imageLink" runat="server" ToolTip="Open de folder in de Windows Explorer">
<asp:Image ID="Image1" runat="server" ImageUrl="~/pages/img/openHS.png" />
</asp:HyperLink>
背后的代码:
string url = string.Concat(((TextBox)viewINFO.FindControl("txtProjectmapBasePath")).Text, ((TextBox)viewINFO.FindControl("txtProjectmapPath")).Text);
HyperLink hl = (HyperLink)viewINFO.FindControl("linkProjectFolder");
if (hl != null)
{
hl.NavigateUrl = Uri.EscapeUriString(@"file:///" + url);
}
没有什么特别的,这个代码在旧版本和新版本之间没有变化。我知道这段代码在firefox和chrome下不行,但是老版本在IE11下可以。
现在从最终用户那里,IE 中的旧版本可以正常工作,如果您单击链接,Windows 资源管理器窗口将打开到文件路径。对于同一最终用户,使用同一浏览器的同一工作站,新版本不起作用。当您单击该链接时,没有任何反应。
现在奇怪的部分是,在我的开发机器上,当我尝试链接时,我通过将文件夹映射到驱动器号 (susbst N: c:\temp\Ndrive) 来模拟网络驱动器,我看到与结尾相同的行为用户,什么也没发生。现在,如果我取消映射驱动器,启动应用程序并单击链接,该链接将在浏览器中打开,并且我得到“页面无法显示”。如果我当时重新映射驱动器,请返回浏览器并重试链接它的工作......
当然存在差异,.net 框架,IIS vs IISExpress vs IIS on azure,但由于它只是一个简单的href,我会说它必须是客户端。此外,代码有时有效表明 urlencoding 至少是正确的(它与旧版本中测试 url 的完全相同)
在数据库中,链接是映射驱动器的路径,例如“N:\folder\folder 2\folder & folder\”,它是正确的 urlencoded,并且只在如上所述的一半时间内有效。如果我使用指向我的 C 驱动器“C:\Temp”的链接,它永远不会工作,如果我使用“127.0.0.1/C$/Temp/”作为链接,它总是可以工作,但将数据库中的所有链接更改为使用 IP地址并不是我们真正想要的方式。
在消除上述所有事情后,我不知道是什么导致了这种行为。有人能指出我正确的方向吗?
【问题讨论】:
-
我的猜测是较新版本的 .NET 在 HTML 中生成不同的控件名称。这意味着变量 url 返回一个空白值。有一个使用旧控件名称的 web.config 设置:
– Robert Paulsen 2 分钟前编辑 -
我的第二个猜测是,浏览器基于 .NET 生成的 HTML 以不同的方式呈现 HTML —— 执行类似添加 可能会有所帮助。
-
您是否查看过不同环境中生成的标记(即:'href:' property )。有效的和无效的有什么区别?
-
据我了解,您正试图从 IE11 访问客户端系统上的本地文件。为此,您的站点需要是浏览器上的受信任站点。默认情况下不启用 file:// URL。
-
@RobertPaulsen,感谢您的评论。如果只看 HTML,输出在不同环境下是相同的。
标签: html asp.net internet-explorer