1

こんにちは、Gridview を Excel ファイルに変換するエクスポート クラスを作成しました。

以下のコードを参照してください。

DownloadFileActionResult クラス:

public class DownloadFileActionResult : ActionResult
    {


        public GridView ExcelGridView { get; set; }
        public string fileName { get; set; }


        public DownloadFileActionResult(GridView gv, string pFileName)
        {

            ExcelGridView = gv;

            fileName = pFileName;

        }



        public override void ExecuteResult(ControllerContext context)
        {

            HttpContext curContext = HttpContext.Current;
            curContext.Response.ClearContent();
            curContext.Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xls");
            curContext.Response.ContentType = "application/vnd.ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            ExcelGridView.RenderControl(htw);
            curContext.Response.Write(sw.ToString());
            curContext.Response.End();

        }

    }

Jquery-ajax:

function Export(){


    var search = {};                                        
    search.Name = "MaterialShape";
    search.Description = "";
    search.Address ="";

    var url_ = generateURL("/Home/Download");                    //Call Save Controller  and pass details entities  

    $.ajax({
        type: "POST",
        url: url_,
        data: search,                                            //details will act as the Entities Model
        traditional: true,
        success: function(data) {


        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
                alert("error: " + XMLHttpRequest.responseText);
        },
        dataType: 'json'
    });

};

検索パラメータ プロパティ:

public class SearchParams
    {
        public string Name{ get; set; }
        public string Description {get;set;}
        public string Address{get;set;}
        ...
     }

そして、コントローラーに実装します:

     //Export to excel
    public ActionResult Download(SearchParam param)
    {

       List<Lookup> lookupList = data.GetLookup(param);
      var grid = new System.Web.UI.WebControls.GridView();

       grid.DataSource = lookupList;
       grid.DataBind();

       return new DownloadFileActionResult(grid, "test");

    }

コントローラーのURLを手動で入力すると(検索パラメーター値なしで)機能します

http://localhost:54928/Home/Download  

または html.action リンクを使用

<%= Html.ActionLink("Home", "/Download", "Home")%> 

しかし、ajax呼び出しを使用すると機能しません

<img src="<%=Url.Content("~/Images/export.png")%>" id="Img1" onclick="Export();" alt="Export" /> 

私が本当に使う必要があること。

私はここに何かが欠けています..何かアイデアはありますか?

よろしくお願いします

4

1 に答える 1

2

Excelファイルをダウンロードするために使用するのは意味がありません$.ajax.ajax呼び出しは、jsコードでテキストベースのデータ(html、xml、JSON)を取得して操作できるようにするためのものです。ブラウザは、Excel などのバイナリ コンテンツの処理方法 (ファイルを保存するためのプロンプトなど) を認識しています。

この場合、Excel ファイルのダウンロードを開始するための単純な POST/GET 要求だけが必要です (次のように単純ですdocument.location = "/home/download?q=keyword";) 。

于 2012-12-27T06:43:30.427 に答える