通过AJAX ASP.NET MVC控制器FileContent的ActionResult称为 [英] ASP.NET MVC Controller FileContent ActionResult called via AJAX

查看:110
本文介绍了通过AJAX ASP.NET MVC控制器FileContent的ActionResult称为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

的设置

控制器包含一个方法公众的ActionResult SAVEFILE()返回一个 FileContentResult

The controller contains a method public ActionResult SaveFile() which returns a FileContentResult.

什么工作

该视图包含一个形式,提交到这个动作。结果是这样的对话:

The view contains a form, which submits to this action. The result is this dialog:

将不起作用

该视图包含一些JavaScript做一个AJAX调用同一个控制器诉讼,但该形式将发布。而不是触发前述的对话框,或者甚至AJAX的成功的功能,该响应触发的AJAX误差函数,而 XMLHtt prequest.responseText 包含该文件的响应。

The view contains some javascript to do an AJAX call to the same controller action where the form would post. Rather than triggering the aforementioned dialog, or even the AJAX success function, the response triggers the AJAX error function, and the XMLHttpRequest.responseText contains the file response.

我需要做的:

请使用AJAX的文件的请求,并最终获得了相同的结果提交表单的时候。我怎样才能让AJAX请求提供提交表单显示的对话框?

Make the request for the file using AJAX, and end up with the same result as when submitting a form. How can I make the AJAX request provide the dialog that submitting a form shows?

推荐答案

下面是一个简单的例子,我做了。这是什么概念LukLed在谈论与调用SAVEFILE但不通过AJAX返回文件内容,而是重定向到下载。

Here's a quick example I made up. This is the concept LukLed was talking about with calling SaveFile but don't return file contents via ajax and instead redirect to the download.

这里的景色code:

<script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(function() {
        // hide form code here

        // upload to server
        $('#btnUpload').click(function() {
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: '<%= Url.Action("SaveFile", "Home") %>',
                success: function(fileId) {
                    window.location = '<%= Url.Action("DownloadFile", "Home") %>?fileId=' + fileId;
                },
                error: function() {
                    alert('An error occurred uploading data.');
                }
            });
        });
    });
</script>

<% using (Html.BeginForm()) { %>

    <div>Field 1: <%= Html.TextBox("field1") %></div>

    <div>Field 2: <%= Html.TextBox("field2") %></div>

    <div>Field 3: <%= Html.TextBox("field3") %></div>

    <button id="btnUpload" type="button">Upload</button>

<% } %>

下面是控制器code:

Here's the controller code:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public JsonResult SaveFile(string field1, string field2, string field3)
    {
        // save the data to the database or where ever
        int savedFileId = 1;

        // return the saved file id to the browser
        return Json(savedFileId);
    }

    public FileContentResult DownloadFile(int fileId)
    {
        // load file content from db or file system
        string fileContents = "field1,field2,field3";

        // convert to byte array
        // use a different encoding if needed
        var encoding = new System.Text.ASCIIEncoding();
        byte[] returnContent = encoding.GetBytes(fileContents);

        return File(returnContent, "application/CSV", "test.csv");
    }

    public ActionResult About()
    {
        return View();
    }
}

这篇关于通过AJAX ASP.NET MVC控制器FileContent的ActionResult称为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆