こんにちは、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" />
私が本当に使う必要があること。
私はここに何かが欠けています..何かアイデアはありますか?
よろしくお願いします