NOTE / MVC

File Download 檔案下載 & 使用 iframe

若使用例如:
Application、Session、Cookie、Cache、ViewState ViewData ViewBage TempData等…. 要記得序列化該類別。
序列化是將資訊轉換成,可被儲存或傳送位元資料流的一種過程。

[DataContract]
[Serializable]
public class VMFileData
{
  //回傳至前端所使用
  [DataMember]
  public Byte[] databyte { get; set; }
  //檔案名稱
  [DataMember]
  public string fileName { get; set; }
  //檔案key值
  [DataMember]
  public int key { get; set; }
}

一開始先搜尋資料以及驗證輸入是否正確,如一切都驗證過再將資訊傳給TempData["File"] = result;

function exportfunciton(salesid) {
//生一個IFRAME出來
var iframe = document.createElement("iframe");
//在這先宣告網址如果輸入資料正確才會真正下載
var url = '@Url.Action("DonwloadFile", CommonRazorFunctions.GetControllerName())?id= ' + id;
$.ajax({
  type: 'POST',
  contentType: "application/json; charset=utf-8",
  url: "@Url.Action('SearchData', CommonRazorFunctions.GetControllerName())",
  data: JSON.stringify({ id: id }),
  datatype: 'json',
  cache: false,
  //設定Token
  headers: { 'RequestVerificationToken': '@CommonRazorFunctions.GetAntiForgeryToken()' },
  success: function (result) {
    //成功後執行function
    if (result.success) {
      //把檔案網址丟給IFRAM
      iframe.src = url;
      //把IFRAME設為不顯示
      iframe.style.display = "none";
      //把IRAME 附加到BODY
      document.body.appendChild(iframe);
	}}
  ,error: function (response) {
    if (response.status == "200") {
      //把檔案網址丟給IFRAM
      iframe.src = url;
      //把IFRAME設為不顯示
      iframe.style.display = "none";
      //把IRAME 附加到BODY
      document.body.appendChild(iframe);
    }},
  });
}
Loading