无法让 SaveFileDialog 与我的网页一起使用

Cannot get SaveFileDialog to work with my web page

我正在尝试添加一种方法,该方法使用我的网格视图中的 link,然后以流的形式从服务器获取文件,然后提示用户将其保存在何处。我已经添加了对我的控制器的 System.Windows.Forms 引用,然后添加了以下方法。

[HttpGet]
[Authorize]
public void DownloadAssetStream(int assetID)
{
    //gStream created from server file.
    Stream myStream = gStream;
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();

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

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
            if ((myStream = saveFileDialog1.OpenFile()) != null)
            {
                // Write file from stream.
                myStream.Close();
            }
        }
    }
}

没有错误,但是当代码到达第 if (saveFileDialog1 行时,它无处可去,也没有出现对话框。我错过了什么?

您没有注意到您不能在 ASP.NET 应用程序中使用 Windows 控件。它可能适用于 Visual Studio,但不适用于现实世界。

与其尝试打开文件对话框,不如将结果发送到流中,例如使用 FileStreamResult:

return new FileStreamResult(gStream, "application/pdf");

第二个参数是内容类型,例如我使用的是 PDF 文件的内容类型。

您可以 return File 结果 action

return File(gStream, "application/pdf", "DesiredNameToSave");

您需要将操作的 return 类型更改为 ActionResult 以处理所有类型的受支持 return 值

public ActionResult DownloadAssetStream(int assetID)

有几个有用的回复显示了如何 return 文件作为流,但为了显示资源管理器 window,由于浏览器安全性,这是不可能的。任何想要允许用户定义自己的目标位置的人都必须使用浏览器自己的下载机制来满足需求,该机制将文件下载到本地,然后让用户选择将文件保存到哪里。