【问题标题】:$.ajax call to Controller passes parameters however performs no action?$.ajax 对控制器的调用传递参数但不执行任何操作?
【发布时间】:2012-12-05 23:40:45
【问题描述】:

我有一个视图,我从 Jqgrid 中的一行获取信息,然后使用该信息作为参数对控制器进行 ajax 调用。参数正在传递给控制器​​,但是当它没有执行我想要的操作时,我正在尝试创建一个 csv 文件。

查看:

    function sendParams() {
    var selId = jQuery("#list").jqGrid('getGridParam','selrow');
    var data = jQuery("#list").jqGrid('getRowData',selId);

        $.ajax({
        type: "GET",
        url: '@Url.Action("ExportToExcel","Home")',
        data: {sidx: 'abcd', sord: 'desc', page:1, rows: 100, id: data.selId, rid: data.id, process: data.process, detail_table: data.detail_table, jobGroup: @Html.Raw(Json.Encode(@ViewBag.jobGroup)), date: @Html.Raw(Json.Encode(@ViewBag.DateSelected))},
        contentType: "application/json; charset=utf-8",

        });
}   


      <button onclick="function sendParams()">Export</button>

控制器

    public ContentResult ExportToExcel(String sidx, String sord, int page, int rows, String id, String process, String detail_table, String jobgroup, String date)
    {


            var sw = new StringWriter();

            List<myModel alist = DAL.ExportExcelConn2.SelectGridItems(sidx, sord, page, rows, rid, process, detail_table, jobgroup, date);

            foreach (var item in alist)
            {

                sw.WriteLine(String.Format("{0}, {1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16}", item.abc, item.sstuff, item.stuff2, item.stuff3, item.stuff4, item.stuff5, item.stuff6, item.stuff7, item.stuff8, item.stuff9, item.stuff10, item.stuff11, item.stuff12, item.stuff13, item.stuff14, item.stuff15, item.stuff16));

            }


            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=Exportabc" + DateTime.Now + ".csv");
            Response.ContentType = "text/csv";
            Response.Write(sw);
            Response.End();


        return Content("Test");


    }

【问题讨论】:

    标签: ajax model-view-controller jqgrid controller export


    【解决方案1】:

    如果您使用$.ajax 调用,您可以在successerror 回调中处理服务器响应。如果返回 CSV 或 Excel 数据,您真正需要的是设置新的window.location

    例如

     window.location = '@Url.Action("ExportToExcel","Home")' + '?' +
        $.param({
            sidx: 'abcd',
            sord: 'desc',
            page:1,
            rows: 100,
            id: data.selId,
            ... // -- all other options
        });
    

    万一网页浏览器会自动打开电脑上的程序(如Excel)。

    我建议您另外阅读the answer,其中包含将数据导出到 Excel(真正的 XLSX 文件)的 ASP.NET MVC 项目。

    【讨论】:

    • 这会是实际代码吗?它不起作用,如果是语法错误,请告诉我?
    • 我个人在我的项目中使用另一种结构来构建 URL。所以我不确定您在“成为实际代码”下的意思是什么?要修复以前发布的代码,只需在 ExportToExcel 和参数之间添加 '?'
    • 非常感谢,您的解决方案奏效了,从昨天开始我就一直在头疼。感谢你的帮助。我已经为 jqGrid 关注你的帖子一段时间了,说真的,你应该写一本书,我认为你真的很博学。再次感谢:)
    • @CharlesMighty:不客气!我虽然已经在写这本书了,但后来我得到了很多工作的项目。所以我只有一些时间在 stackoverflow 上帮助其他人。可能在二月份我会得到更多的时间,然后再回来看书。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2018-08-04
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多