2

这个问题之后,我之前问过我想知道 - 在我的控制器的操作返回文件并写入响应后,是否也可以显示 JavaScript 警报?

请注意,这个项目是MVC 1.0

这是我想在文件下载之前执行一些 Javascipt 的 ActionReult:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName)
{
    if (submitButton.Equals("Import"))
    {
        byte[] fileBytes = ImportClaimData(fileName, new CompanyExcelColumnData());
        if (fileBytes != null)
        {
            //This method stores the string in a message queue which is stored in the 
            //session and rendered from within a UserControl. The Javascript alert
            //is then shown subsequently.
            UserMessageUtil.Info("Data imported successfully.", Session);

            //The file downloads but no Javascript alert is shown from the line above.
            return File(
                fileBytes,
                "application/ms-excel",
                string.Format("Import {0}.xls", DateTime.Now.ToString("yyyyMMdd HHmm")));
        }
        return View();
    }
    throw new ArgumentException("Value not valid", "submitButton");
}

用于处理用户控件内部队列的 HTML Helper 方法:

public static string UserMessage(this HtmlHelper helper, HttpSessionStateBase session)
{
    MessageQueue queue = UserMessageUtil.GetMessageQueue(session);
    Message message = queue.Next;
    String script = null;

    if (message != null)
    {
        do
        {
            string messageStr = message.Text;
            ....
            script += @"alert('" + messageStr + "');";
        } 
        while ((message = queue.Next) != null);

        return script;
    }

    return null;
}

基本上,文件会下载,但不会显示 Javascript 警报。用于项目的UserMessageUtil.Info()其他部分并按预期工作,在执行时显示警报。

4

1 回答 1

0

如果我理解正确,您希望在文件准备好下载后执行一些客户端 javascript 吗?

我有类似的需求,尽管在 Java EE 中技术问题仍然相同。在此答案中查看此出色的 hack http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx检测时间浏览器接收文件下载

基本上,您想从您的操作中设置一个 cookie,该 cookie 将与服务器响应一起返回,并有一些 javascript 轮询客户端是否存在该 cookie。一旦服务器响应并向客户端显示文件下载对话框,就会检测到 cookie 并执行您的脚本。脚本执行后,您可以销毁 cookie。

于 2013-02-08T10:39:41.340 回答