【问题标题】:asp.net - Hyperlink not workingasp.net - 超链接不起作用
【发布时间】:2016-05-03 07:17:12
【问题描述】:
protected void Button1_Click(object sender, EventArgs e)
{
    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(@"C:\Documents and Settings\Admin\Desktop\New Folder\"+TextBox1.Text);
    foreach (System.IO.FileInfo file in dir.GetFiles())
    {
        HyperLink h = new HyperLink();
        h.NavigateUrl = "file:///c:/Documents and Settings/Admin/Desktop/New Folder/" + TextBox1.Text + "/" + file.Name;


        h.Text = file.Name;
        PlaceHolder1.Controls.Add(h);
    }


}

在执行此代码时会生成超链接,但它们不起作用。 当我点击它们时没有任何反应。

请帮忙。

【问题讨论】:

    标签: asp.net file hyperlink


    【解决方案1】:

    在 ASP.NET 中,超链接必须是 URL,而不是计算机上的文件夹。

    如果您的文件在您的站点中,请尝试 Sever.MapPath

    【讨论】:

    • 不,我的文件不在站点中。它可能在系统中的任何位置。
    • @Akshay:您的代码在服务器端执行,而您正试图让它在客户端工作?你应该使用别的东西; ASP.NET 不是您想要做的事情的工具。
    • @Randolpho:但是当我们提供网站文件夹中任何文件的 url 时,它就可以工作了。当超链接的 navigateurl 指向系统中不在网站文件夹中的任何外部文件时,就会出现问题。
    • @Akshay:没错!如果您希望 IIS 提供文件,则该文件必须存在。如果您只是向客户端提供本地文件路径,他们将尝试在 他们的计算机上查找文件而不是在服务器上查找文件。
    【解决方案2】:

    这是由于浏览器的安全限制。如果你生成一个“file://”链接,它是相对于用户的文件系统的。

    理论上,如果浏览器允许这些类型的链接,攻击者可以远程发现有关用户文件系统的信息。因此,现代浏览器不允许这种类型的链接。

    不幸的是,这没有很好的文档记录,大多数浏览器都允许链接并且只是放弃行为 - 所以当你点击它们时没有任何反应。也没有什么好的解决方法。

    请参阅我的问题here 进行进一步讨论。

    【讨论】:

      【解决方案3】:

      查看this 问题。该解决方案也可能对您有用。

      【讨论】:

        【解决方案4】:

        我发现(在重定向到您自己的另一个网页的情况下)使用这个: compontent.NavigateUrl = "~/page.aspx";

        而不是这个:

        component.NavigateUrl = server.MapPath("path");

        为我工作。 server.MapPath 创建了一个 File:// 链接,因此浏览器不允许这样做。

        希望这对某人有所帮助,在某些情况下它不起作用,但它适用于我的个人需求。

        【讨论】: