所以我正在使用 ASP.NET MVC 开发 Intranet Web应用程序,我需要创建一个指向网络上文件夹的链接。因此,举个例子,假设我想创建一个指向“C:\”的链接,这个uri存储在site.DocsPath
中。我认为最简单的方法就是创建一个常规链接,如下所示:
<a href="file:///<%= site.DocsPath %>">Documents</a>
这解析为:
<a href="file:///C:\ruby">Documents</a>
但是,当您点击该链接时, 没有任何反应 。这基本上就像点击普通文字一样;绝对没有发生。没有重定向,没有。我在Firefox和IE中都尝试过这种方法,两种情况都会发生同样的行为。
最初我认为它可能是斜线。所以我将file:///C:\ruby
粘贴到地址栏中,看看它是否正确。有效。我在Firefox和IE中都尝试过这种方法,它可以兼用。
所以现在,我在想“嘿,也许我的HTML由于某种原因不合适”。所以我创建了一个小的html页面,如下:
<html>
<head><title>Test Page</title></head>
<body>
<a href="file:///C:\ruby">Documents</a>
</body>
</html>
瞧瞧.....它有效。我点击链接,它实际上是在链接之后。这适用于Firefox和IE。
所以现在我很困惑。在两种情况下,HTML 完全相同(通过 ASP.NET MVC 和静态HTML)。然而它仅适用于静态HTML案例。
现在,我只是拉着稻草。我试着粘贴
<a href="file:///C:\ruby">Documents</a>
直接进入 ASP.NET MVC 中的ViewPage。 Nope ,不起作用。
然后我尝试将一个随机网站静态粘贴到ViewPage中,例如:
<a href="http://www.google.com">Supreme Overlord of the Internet</a>
的作品。所以,现在我已经确认ASP.NET实际上可以遵循手工生成的链接。
现在,没有什么可做的,我做了一些疯狂的事情。 我将链接设置为不存在的地方,例如:
<a href="file:///X:\this\doesnt\exist">I Hate ASP.NET MVC right now</a>
Firefox坚持使用它并不遵循它。 然而, IE实际上遵循它 并给我一个错误页面。如果site.DocsPath = "X:\this\doesnt\exist"
我放了同样的事情:
<a href="file:///<%= site.DocsPath %>">Documents</a>
所以现在,我完全糊涂了。我不知道到底是什么。显然,ASP.NET MVC讨厌我,这令人不安,因为除了爱之外我什么都没有表现出来。
如果有人知道发生了什么事,我将非常感谢你的帮助。谢谢!
更新: 经过大量测试(以及来自SO的所有人的许多非常有用的答案和评论),我得出的结论是,只需创建一个正常的链接到 的文件夹无效 。我最终尝试将我在上面创建的静态html页面放在Web服务器上,结果证明它不起作用。我还创建了一个Ruby on Rails应用程序和一个小型PHP应用程序,并通过它们进行了尝试,它也不适用于它们。所以唯一的另一种可能性是它实际上是一个浏览器。
我想我可能会以某种方式连接到SharePoint服务器,以便管理所有文档。感谢所有评论并就此问题提供各种答案的人。我只能选择一个答案,但每个人的评论和答案确实提供了关于发生了什么的清晰画面。谢谢!
答案 0 :(得分:3)
这更多是评论而不是答案,但我无法发表评论......
这不是asp.net-mvc的问题。这是一个浏览器问题。呈现HTML后,无论是硬编码,.net还是cgi都无关紧要。不要讨厌asp.net ......
话虽如此,如果你在那里发帖,我认为没有其他人可以帮助你。
考虑到您的测试,它绝对听起来像是一个安全问题。这也很有意义。
另外,通过一些谷歌搜索,我发现了这个:
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/HTML/Q_20405367.html
至少在IE中(参见下面MS的回复),这是一个特定的安全设置。我想象在FF和其他人中有类似的东西。
您遇到的问题是: Internet中的新安全功能 探索6 Service Pack 1.为了 防止互联网恶意代码 访问您的本地文件, 开发团队开发了新的 安全功能并将其包含在内 IE6 SP1。请注意这一点 是一种正常行为。
实际上,IE6 SP1包含新内容 安全代码检查阻止 “区域提升”。这意味着 位于“互联网”的文件 区域将不被授予访问权限 (通过HREF,脚本等)到 “我的电脑”区域中的文档。 只有文件位于 “受信任”或“我的电脑”区域可以 访问“我的电脑”中的文档 区。
因此,如果你想允许 要访问的不受信任的文档 “我的电脑”区域中的文档, 您可以在中添加源URL “可信站点”(必须这样做) 谨慎对待明显的安全性 原因)。 “本地内联网”区域是 也值得信赖。
此外,以下注册表 key允许禁用新安全性 代码检查,以防止“区域 海拔”: - 您可以创建此DWORD键并将其设置为零以禁用此新键 特征。此外,您可以启用它 随时将其更改为1.
HKCU \软件\微软\互联网 资源管理器\ MAIN \ Disable_Local_Machine_Navigate = 0 REG_DWORD
不建议在上面使用 注册表项,因为它打破了“区域 提升“安全修复。
詹姆斯
答案 1 :(得分:3)
我正在研究类似的问题并提出以下解决方案。我正在使用ASP.NET而不是ASP.NET MVC;但是,从我所知道的和我读到的内容来看,这也适用于ASP.NET MVC。首先,创建如下链接:
<a ID="A1" runat="server">Documents</a>
然后在代码隐藏中(假设代码隐藏在C#中),在Page_Load中设置了一个click事件:
A1.ServerClick += A1_ServerClick;
并有一个像这样的点击事件:
protected void A1_ServerClick(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("C:\\ruby");
}
System.Diagnostics.Process.Start将只打开一个目录。为了避免目录不存在的问题,您可以使用Directory.Exists(“C:\ ruby”)检查是否存在,如果Directory.CreateDirectory(“C:\ ruby”)
答案 2 :(得分:2)
浏览器中可能有一些安全限制。你尝试过其他浏览器吗?
答案 3 :(得分:1)
将site.site.DocsPath设为System.Uri。所以在创建DocsPath时请执行以下操作
DocsPath = new Uri("C:\\ruby");
然后当你做
<a href="<%= site.site.DocsPath %>">Documents</a>
将输出
<a href="file://C:\ruby">Documents</a>
但是作为旁注,您将无法从页面外部提供此服务。如果您需要将文档提供给Web,则需要设置友好的互联网界面。比如将输入作为文档然后通过某种处理程序将文档反馈给浏览器的页面。
答案 4 :(得分:1)
我也试过它不按你的方式工作。 为什么不试试这种方式, File Upload Download,您可以在这里使用下载部分,下载时会询问您是否要打开它。
答案 5 :(得分:1)
从IE迁移到文件夹可能存在问题。尝试使用file:///重定向到本地文件 - 这是否有效:
<a href="file:///C:\ruby.html">Document</a>
如果是,请尝试在您的网址上添加一个斜杠:
<a href="file:///C:\ruby\">Documents</a>
或者使用反斜杠:
<a href="file:///C:/ruby/">Documents</a>