【问题标题】:Winform browser control "attachment" buttonWinform浏览器控件“附件”按钮
【发布时间】:2013-04-09 22:46:36
【问题描述】:

我们有一个带有浏览器控件的 winform 应用程序。以前这些文件(总是非常小的 10kb 等)存储在 unc 位置。我们将生成一些 html 并将 html 加载到浏览器中。如果我们想让这些小文件之一可用,我们将在 HTML 中包含一个锚标记 () 当 html 显示在浏览器控件中时,链接也会显示。用户可以点击链接,会出现文件另存为对话框。

我们现在将这些文件作为 varbinary 存储在数据库中,因此不再有锚标记指向的物理位置。我有几个想法,但希望比我聪明得多的 SO 成员插话。

在我看来,选项 1 是在 html 中添加一个图像按钮、锚标记、可单击的内容。我会在 javascript 中或作为回发处理“onclick”。就我的知识水平而言,这似乎是可行的,除了我不知道如何将字节 [] 转换为用户的另存为对话框......我是否先将其渲染到磁盘?

我的另一个想法是在浏览器控件中有一个 NOT 按钮。如果 biz 规则要求显示文件,则此按钮将隐藏/可见。单击该按钮将生成 byte[],该字节[] 可以轻松转换为文件,并保存为 winform 应用程序中显示的对话框。

所以欢迎任何想法或所有不同的建议 TIA JB

【问题讨论】:

    标签: asp.net ajax winforms


    【解决方案1】:

    我了解您可以控制 Windows 窗体 Web 浏览器控件中显示的 ASP.NET 网页,因此您可以编辑该页面并按照您想要的方式构建它。

    如果这是真的,托管网络浏览器或普通 IE 会话中的行为是相同的,我建议在 asp.net 网页表单页面中创建一堆超链接或按钮,每个都有一个特定的 ID,比如要下载的文件的 ID。然后您可以创建一个处理程序或 button_click 事件处理程序,您可以在其中通过单击的按钮/链接关联的文件 ID 获取文件的字节 [],或者如果您启动了处理程序调用,则从查询字符串中获取文件的字节 [],然后开始向下流式传输到浏览文件内容,浏览器会为你做所有需要的事情。

    例如,作为一个起点,取自这里的一些代码:http://social.msdn.microsoft.com/Forums/en-US/silverlightnet/thread/d6a5087f-43b1-4782-95f1-d1376130d2c8

    向您展示了从页面加载中执行此操作的可能方法,诀窍是对 GetDocument 的调用为您获取正确的文件内容(在这种情况下来自查询字符串,想象一下如果我们在处理程序中处理方法)并返回一个包含字节的类DocumentInfo。你不需要这个 DocumentInfo,你可以有一个方法,例如通过 File Id 返回byte[]...

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            string queryString = this.Request.QueryString.ToString();
            if (string.IsNullOrEmpty(queryString)) return;
    
            DocumentInfo documentInfo = GetDocument(queryString);
    
            if (!documentInfo.HasValue) return;
    
            Response.ClearHeaders();
            Response.ClearContent();
    
            Response.AppendHeader("Content-Length", documentInfo.Value.Content.Length.ToString());
    
            Response.ContentType = "application/octet-stream";
    
            Response.AppendHeader("Content-Disposition", "attachment; filename=Test.doc");
    
            Response.BinaryWrite(documentInfo.Value.Content);
    
            Response.End();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2015-02-12
      • 2011-07-07
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多