2016-10-09 4 views
0

AJAX 호출 대신 일반 호출을 사용하는 것이 더 좋지만 다운로드 중에 문제가 발생하면 모달 대화 상자에 오류 메시지를 표시하는 것과 같은 이유로 MVC5 프로젝트에서 AJAX 호출을 사용하여 파일을 다운로드해야합니다. 여기에 내가 시도를 많이 한 후 마지막으로 한 것입니다 :ASP.NET MVC5에서 AJAX 호출을 통해 파일을 다운로드 할 수 있습니까?

보기 :

<a href="javascript:downloadFile()">Download</a> 


function downloadFile() { 
    $.ajax({ 
     type: 'POST', 
     url: '/Experiment/GetFile', 
     data: '{id:' + 8 + '}', //For test purpose I used static id 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function (returnValue) { 
      window.location = '/Experiment/GetFile?id=' + returnValue; 
     } 
    }); 
}; 

컨트롤러 : 컨트롤러, 나는 그런 방법 뭔가를

하지만, 나는 AJAX Post와 성공 방법에 대해 같은 방법을 사용해야하는지 아닌지 정말 혼란 스럽다.

[HttpPost] 
public ActionResult GetFile(int id) 
{ 
    var dataContext = repository.FileAttachments.FirstOrDefault(m => m.Id == id); 
    if (dataContext == null) 
    {  
     return Json(new { success = true, returnValue = "8" }); 
    } 
    else 
    { 
     return Json(new { success = false, message= "Error..." }, JsonRequestBehavior.AllowGet); 
    } 
} 

ASP.NET MVC5에서 AJAX 호출을 사용하여이 dosnload 연산을 수행하는 현명한 방법이 있습니까?

+0

그것의에 따라 같은 당신은보기 페이지를 편집 할 필요가 분명이의 요점은 무엇 왜 당신은 아약스 호출이 필요하다고 생각 하는가? (단지 data : {id : 8}'을 사용하고'contentType : 'application/json; charset = utf-8',')을 제거 할 것인가? –

+0

** 1) AJAX는 MVC 프로젝트의 모든 액션을 요구하며 AJAX를 사용하기를 원했던 가장 큰 이유 중 하나는 컨트롤러에서 JSON으로 리턴 된 에러 메시지를 디스플레이하는 것입니다. 반면에, AJAX가 파일 다운로드 작업을하지 않기를 제안했다면,이 시나리오에서 단점에 대해 곧 알려 주시겠습니까? >>> –

+0

** 2) ** 링크를 사용하여 파일을 다운로드 하시겠습니까? Javascript 메서드를 호출하여 파일을 다운로드해야합니까? 아니면 HtmlActionlink를 통해 다운로드해야합니까? –

답변

0

당신은 파일 이름이나 파일 경로 예 "/file/download.doc" 을 반환해야 그리고

<a href="javascript:downloadFile()">Download</a> 
<a href="" id="todownload" download> 
function downloadFile() { 
    $.ajax({ type: 'POST', url: '/Experiment/GetFile', data: '{id:' + 8 + '}', //For test purpose I used static id 
    contentType: 'application/json; charset=utf-8', dataType: 'json', 
    success: function (returnValue) 
    $("#todownload").attr('href',returnValue); 
    $("#todownload").click(); 
    } 
    }); 
}; 
관련 문제