我们正在努力将旧的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与IISExpress与IIS上的IIS,但由于它只是一个简单的href我会说它必须是客户端。此外,代码有时工作表明urlencoding至少是正确的(它与测试网址的旧版本完全相同)
在数据库中,链接是映射驱动器的路径,所以类似于“N:\ folder \ folder 2 \ folder&amp; folder \”,这是正确的urlencoded,并且只能工作一半,如上所述。如果我使用链接到我的C驱动器“C:\ Temp”它永远不会工作,如果我使用“127.0.0.1/C$/Temp/”作为链接它总是有效但改变数据库中的所有链接使用IP地址不是我们想去的方式。
在消除了上述所有内容后,我不知道可能导致此行为的原因。任何人都可以指出我正确的方向吗?
答案 0 :(得分:3)
考虑使用嵌套的asp:Image标签修改asp:HyperLink标签,其中包含以下两(2)个选项之一:
1)使用带有ImageUrl属性的asp:HyperLink标记并删除嵌套的图像标记。有关详细信息,请参阅此Microsoft Hyperlink.ImageUrl Property page。
2)使用带有ImageUrl属性的asp:ImageButton标记。有关详细信息,请参阅标题为how to link imagebutton to url visual developer的SO问题。
如果这些选项都不能解决您的问题,那么您可能会遇到文件资源访问问题而不是ASP.NET语法问题。