Silverlight 2 - 下载文件 - IE Blocks文件下载

时间:2009-04-01 15:05:50

标签: c# asp.net javascript silverlight internet-explorer

我只在Silverlight应用程序中遇到IE问题。由于Silverlight 2不包含文件下载机制,因此我可以使用自己的设备来提供解决方案。我这样做的方式如下:

HtmlPage.Window.Navigate(new Uri(sb.ToString(),UriKind.Relative));

我的StringBuilder包含带有查询字符串的相对url,该查询字符串是服务器上的* .ashx处理程序,它读取查询字符串,从数据库中获取一些数据,并返回一个Excel文件。

当我这样做时,我只在IE中获得一个被阻止的文件下载栏。我知道这是IE中的一个新的安全“功能”,它被阻止,因为它认为下载不是由用户与网页的交互触发的。用户可以选择允许下载,并且该设置似乎在会话的其余部分中被记住。但是下次他们打开页面时会再次发生。即使站点位于受信任区域,即使弹出窗口阻止程序配置为允许站点弹出窗口。

有谁知道如何让IE知道用户确实请求过这个文件?

4 个答案:

答案 0 :(得分:2)

我有完全相同的问题。我的解决方案是不使用HtmlPage.Window.Navigate,而是使用HyperlinkBut​​ton并动态设置NavigateUri属性。

如上所述保存和恢复应用状态不起作用。嗯,确实如此,但是无法确定何时需要完成以及何时不需要。所以,最终,它并没有真正起作用。

请参阅有关codeplex的讨论......

http://slideshow2.codeplex.com/Thread/View.aspx?ThreadId=60242

答案 1 :(得分:1)

尝试HtmlPage.PopupWindow而不是HtmlPage.Window.Navigate。这有助于我解决IE默认为Internet区域站点禁用的“自动提示文件下载”设置。

答案 2 :(得分:1)

这是我的代码解决方案,用于打开下载的URL并覆盖IE 8中的自动提示文件下载选项问题。

它也使用 HyperlinkBut​​ton ,但所有都是从代码中调用的:

public class BrowserHelper
{
    private sealed class HyperlinkButtonCaller : HyperlinkButton
    {
        public static void OpenUrl(Uri url)
        {
            var button = new HyperlinkButtonCaller()
            {
                NavigateUri = url
            };

            button.OnClick();
        }
    }

    public static void OpenUrl(Uri url)
    {
        if (url == null)
        {
            throw new ArgumentNullException("url");
        }

        HyperlinkButtonCaller.OpenUrl(url);
    }
}

BrowserHelper.OpenUrl(new Uri(ClientGlobalInfo.Current.ApplicationUrl, "myhandler.ashx"));

答案 3 :(得分:0)

在我的情况下,第一次(使用IE 7)只发生了一次,也许这种情况发生在你的本地开发实例上?

我认为你无能为力,即使是MSDN网页告诉你“一条消息会出现在...之上”,这可以减轻这个问题:

  • 警告用户该消息将被显示,然后一旦他点击该应用程序重置(将当前应用程序状态存储在隔离的存储中,当您收到重置时重新加载带有设置的应用程序)。

  • 打开一个弹出窗口,然后在弹出包含和标准HTML按钮下载。

HTH   布劳略