Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Winform浏览器控件“;附件「;按钮_Asp.net_Ajax_Winforms - Fatal编程技术网

Asp.net Winform浏览器控件“;附件「;按钮

Asp.net Winform浏览器控件“;附件「;按钮,asp.net,ajax,winforms,Asp.net,Ajax,Winforms,我们有一个winform应用程序,上面有一个浏览器控件。以前,这些文件(总是非常小的10kb等)存储在unc位置。我们将生成一些html并将html加载到浏览器中。如果我们想让这些小文件中的一个可用,那么当HTML显示在浏览器控件中时,我们会在HTML中包含一个锚定标记(),链接也是如此。用户可以单击链接,此时会出现“文件另存为”对话框 我们现在将这些文件作为varbinary存储在数据库中,因此锚标记不再指向物理位置。我有几个想法,但希望比我聪明得多的SO成员加入进来 在我看来,选项1应该是有

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

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

在我看来,选项1应该是有一个图像按钮、锚定标记、html中的一些东西可以点击。我会用javascript或作为回发处理“onclick”。就我的知识水平而言,这似乎是可行的,但我不知道如何将字节[]转换为用户的“另存为”对话框……我是否先将其渲染到磁盘

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

因此,欢迎任何想法或所有不同的建议 短暂性脑缺血发作
JB

据我所知,您控制着windows窗体web浏览器控件中显示的ASP.NET网页,因此您可以编辑该网页并按自己的方式构建它

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

例如,作为一个起点,下面是一些代码:

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

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();
    }
}