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 设置:考虑使用以下两 (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 中的奇怪行为