ShaneKm
ShaneKm

Reputation: 21328

How do I export text data to csv using MVC 3?

I need to export text data to csv in MVC3. I do the following:

VIEW:

$(".export").click(function() {
    $.get("@Url.Action("Export","Log")");
});

CONTROLLER:

    public ActionResult Export()
    {
        var sb = new StringBuilder();

        var list = this.systemLogRepository.GetFilterList(
            null, this.ControllerContext.RequestContext.HttpContext.Request.QueryString, null);

        foreach (var item in list)
        {
            sb.AppendFormat(
                "{0},{1},{2},{3},{4}", item.Machine.Name, item.PackageID, item.ErrorDescription, item.OccurenceTime, Environment.NewLine);
        }

        return this.File(new UTF8Encoding().GetBytes(sb.ToString()), "text/csv", string.Format("Log-{0}.csv", DateTime.Now.ToString("g").Replace("/","-").Replace(":","_").Replace(" ", "-")));
    }

This returns the content but does not pop up a window with Save As and Open options ?? thanks

Upvotes: 4

Views: 5014

Answers (1)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038780

Don't use AJAX to download a file. Use a normal link or a button:

@Html.ActionLink("export to CSV", "Export", "Log")

Now you could get rid of the javascript bit. The reason you cannot use AJAX to download files is because the content will indeed be transferred to the client but you cannot open a Save As dialog from javascript.

Upvotes: 9

Related Questions