Asp.net 文件链接:在 IE 中的奇怪行为

Posted

技术标签:

【中文标题】Asp.net 文件链接:在 IE 中的奇怪行为【英文标题】:Asp.net link to file: in IE strange behaviour 【发布时间】: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,输出在不同环境下是相同的。 【参考方案1】:

考虑使用以下两 (2) 个选项之一修改 asp:HyperLink 标记和嵌套的 asp:Image 标记:

1) 使用带有 ImageUrl 属性的 asp:HyperLink 标记并删除嵌套的图像标记。请参阅此Microsoft Hyperlink.ImageUrl Property page 了解更多信息。

2) 使用带有 ImageUrl 属性的 asp:ImageButton 标记。有关更多信息,请参阅标题为:how to link imagebutton to url visual developer 的 SO 问题。

如果这些选项都不能解决您的问题,那么您可能遇到了文件资源访问问题,而不是 ASP.NET 语法问题。

【讨论】:

感谢您的回答,抱歉,我花了一些时间来验证。但这并没有帮助,行为略有不同,但最终结果是相同的。是的,它可能是某种文件资源访问问题。

以上是关于Asp.net 文件链接:在 IE 中的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

asp.net 5 MVC6 中标签助手和路由属性之间的奇怪行为

UserManager 在 .Net Identity 中的奇怪行为

ASP.NET Core 验证标记助手奇怪的行为

[ASP.NET][C#]下载文件时中文文件名出现乱码

JavaScript 不会在 asp.net 中隐藏文本区域

asp.net下载文件自选路径