【问题标题】:How to avoid "unsaved form changes" after submit response is an attachment?提交响应是附件后如何避免“未保存的表单更改”?
【发布时间】:2012-01-06 07:28:26
【问题描述】:

不要介意以下内容。我发现我的问题是由应用程序中其他地方的 js 代码引起的。

我的应用程序提交了一个表单。这将转到控制器上的操作方法,它执行以下操作:

Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=SQLQueryResult.csv");
Response.AppendHeader("Content-Length", sb.Length.ToString());
Response.ContentType = "text/csv";
Response.Write(sb.ToString());
Response.End();
return null;

这很好用。浏览器将其视为要下载的附件。但是,浏览器也会出现“未保存的表单更改”提示。

有什么办法可以避免这个提示?当它是一个普通的 asp.net 页面时,我没有这个问题,但现在我已经转换为 mvc 了。

【问题讨论】:

    标签: html asp.net-mvc-3 forms http-post


    【解决方案1】:

    很难说,但您展示的代码是反 MVC 模式。以下是提供文件下载的 MVC 控制器操作的样子:

    public ActionResult Download()
    {
        StringBuilder sb = ...
        var csv = Encoding.UTF8.GetBytes(sb.ToString());
        return File(csv, "text/csv", "SQLQueryResult.csv");
    }
    

    如您所见,控制器操作不会写入响应。那不是他们的目的。它们返回操作结果。正是那些行动结果应该负责将结果呈现给客户。

    【讨论】:

    • 这是一个很好的提示。我已经更改了我的代码,现在它更漂亮了,但我仍然有问题。
    • 我发现我的问题是应用其他地方的js代码引起的。
    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多