2016-04-05 15 views
0

Dies ist meine Methode, aber meine Antwort ist ein einfaches HTML, ich dupliziert nur einen erfolgreichen Code in method2 innerhalb ExportReportChip() und es funktioniert nichtMeine Methode sendet HTML statt Excel-Datei

public ActionResult SuccessFulMethod(DateTime reference, MobileFilter? filter) 
{ 
    var itens = GetAccountModel(reference, filter); 
    var text = ""; 
    GridView gv = new GridView(); 
    var products = new System.Data.DataTable("table"); 
    products.Columns.Add("Referência", typeof(string)); 
    products.Columns.Add("Número", typeof(string)); 
    products.Columns.Add("Funcionário", typeof(string)); 
    products.Columns.Add("Empresa", typeof(string)); 
    products.Columns.Add("Particular", typeof(string)); 
    products.Columns.Add("Total", typeof(string)); 
    products.Columns.Add("Status", typeof(string)); 
    products.Columns.Add("RDESP", typeof(string)); 

    foreach (var i in itens.Mobiles) 
    { 
     var reimbursementid = i.ReimbursementId; 

     if (i.TotalEnterprise == 0) 
      text = "Sem RDESP"; 
     else 
     { 
      if (i.CurrentState == WorkFlowState.Approved) 
       text = "Com RDESP"; 
      else 
       text = "Aguardando"; 
     } 

     products.Rows.Add(itens.Bill.Reference.ToString("MM/yyyy", CultureInfo.CurrentUICulture), 
      i.PhoneNumber, 
      i.Employee.Name, 
      i.TotalEnterprise.ToString("C", CultureInfo.CurrentUICulture), 
      i.TotalParticular.ToString("C", CultureInfo.CurrentUICulture), 
      i.Total.ToString("C", CultureInfo.CurrentUICulture), 
      i.CurrentState, 
      text 
      ); 
    } 

    gv.DataSource = products; 
    gv.DataBind(); 
    Response.ClearContent(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment; filename=Contas_de_Celular: " + ".xls"); 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.Charset = ""; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gv.RenderControl(htw); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 


    return RedirectToAction(ACCOUNT_VIEW_NAME); 
} 

Diese die Methode ist, die HTML-

public ActionResult ExportReportChip() 
{ 
    var items = GetMobileChipsOwner(); 
    GridView gv = new GridView(); 
    var products = new System.Data.DataTable("table"); 
    products.Columns.Add("Chip", typeof(string)); 
    products.Columns.Add("Dono", typeof(string)); 
    products.Columns.Add("Serviços", typeof(string)); 
    products.Columns.Add("Status", typeof(string)); 
    products.Columns.Add("DependenteX", typeof(string)); 

    products.Rows.Add("1212121", "dono", "service Teste", "i.Status", "i.DependentName"); 

    gv.DataSource = products; 
    gv.DataBind(); 
    Response.ClearContent(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment; filename=Contas_de_Celular:"+".xls"); 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.Charset = ""; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    gv.RenderControl(htw); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 


    return RedirectToAction(CHIP_REPORT_VIEW_NAME); 
} 

so gibt, ist dies die Rückkehr in Chrom:

enter image description here

+0

':' ist nicht in einem Dateinamen gültig. –

+1

Dies wird immer HTML zurückgeben, Sie können es als .xls benennen und Excel öffnet es, aber seine * nicht * eine Excel-Datei, sein HTML. –

+0

Warum schreibst du in die Antwort * und * eine Umleitung zurück? Das ergibt keinen Sinn. Gib einfach ein 'FileResult' zurück. – David

Antwort

0

Ich habe es.

Ich änderte meine Ajax

Blick auf window.location:

window.location = "/MyController/ExportReportChip"; 

/* 
$.ajax({ 
url:"/mobile/ExportReportChip", 
data:{}, 
type:"POST" 
}).done(function(result){ 

}).fail(function(){ 

}); 
*/ 

es funktionierte!

Verwandte Themen