Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 861
ShaneKm Avatar asked Dec 27 '22 16:12

ShaneKm


1 Answers

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.

like image 55
Darin Dimitrov Avatar answered Jan 12 '23 22:01

Darin Dimitrov