在razor / bootstrap中保存MVC的SaveFile对话框

时间:2015-07-13 19:50:58

标签: asp.net-mvc razor

使用OpenXml打开,修改然后保存docx文档。代码(未显示)将打开文档,修改,我可以将其直接保存到直接路径。但是找不到如何让用户保存文件AS对话框工作? 无法找到类型或命名空间名称“SaveFileDialog”(您是否缺少using指令或程序集引用?)

    SaveFileDialog saveFileDialog1 = new SaveFileDialog();

    saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    saveFileDialog1.FilterIndex = 2;
    saveFileDialog1.RestoreDirectory = true;

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
     Response.Clear();
             Response.ContentType = "application/octet-stream";
             string fileNamewrite =(string) (Session["FileNameFromUser"]);
             Response.AddHeader("Content-Disposition",    String.Format("attachment; filename={0}",fileNameout));
             Response.BinaryWrite(mem.ToArray());
             Response.Flush();
             Response.End();

SaveFileDialog是我希望使用的一种方法,但找不到任何类似的方法。

甚至尝试使用漂亮的图形安装引导程序对话框? http://getbootstrap.com/javascript/#modals这个工作了几次,然后在修改以适应我的代码后,按钮点击什么也没做。我回到原来并粘贴,保存,仍然什么都不做。

控制器修改了字节数组,因此在Response.Clear();到最后,这部分运行并保存文件,但它必须是一个用户对话框保存文件作为接口,从用户返回文字字符串路径?

控制器可以看到类似于SaveCileDialog for MVC的方法吗?

编辑: 浏览器设置阻止了对话框,它只会保存到/ Downloads文件夹而不提示。秘密在于其中一个响应标头或内容设置,浏览器将自动生成saveFileAs对话框。在WinForms中,它是手动完成的...这种方法有效,尽管它可能有冗余:

    public FileContentResult GetFile(byte[] m)
    {
        string mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
        string filenam = "output.docx";
        byte[] fileContent = null;
        fileContent = m; //["FileContent"];
        ///////////////////////////
        Response.Clear();
        FileInfo file = new FileInfo(fileNameout);
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.TransmitFile(file.FullName);

        // string fileNamewrite = (string)(Session["FileNameFromUser"]);
        // Response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", fileNameout));

        Response.Flush();
        Response.End();
        return File(fileContent, mimeType, filenam); //pass contents as bytes[] , your mimetype , and the file name save as.

    }

1 个答案:

答案 0 :(得分:0)

SaveFileDialog是一个Windows原生app应用程序,而不是Web应用程序。

简单地说......你不能强迫用户看到保存对话框,因为它取决于他们在浏览器中看到的浏览器和设置。

如果用户选择保存文件,

content-disposition仅建议默认文件名!浏览器使用content-type标头来确定要执行的操作。