2015-01-29 6 views
-1

내 aspx 페이지에 다운로드 링크가 있습니다. 그것을 클릭하면 다운로드하기 전에 파일을 수정 한 데이터를 입력하라는 팝업이 나타납니다.ASPX 페이지의 팝업에서 파일 다운로드 일반 처리기를 통해

팝업을 통해 생성 된 요청을 파일을 생성하고 응답 헤더에 추가하는 코드가있는 일반 처리기로 전달했습니다.

이제 코드가 최적화되었거나 기본 프레임이 호출 스택 맨 위에 있으므로 표현식을 평가할 수 없습니다. 스레드 예외 예외가 발생했습니다.

팝업 때문에 클라이언트가 응답 헤더를 해석하지 못했을 것으로 생각됩니다.

ASPX 팝업 버튼 :

<button id="BtnDownload" class="btnSubmit" onclick="javascript:downloadFileViaHandler()"> 
             Download</button> 

자바 스크립트 기능 :

function downloadFileViaHandler() { 
$('#popupdiv').dialog('close'); 
var urlHandler = "/WebHandlers/downloadHandler.ashx"; 
var urlHandlerParam = window.location.href.split('/'); 
var actualUrlparam = urlHandlerParam[0] + "/" + urlHandlerParam[1] + "/" + urlHandlerParam[2] + "/" + urlHandlerParam[3]; 
//Sanitize URLs for Server  
var urlHandler = actualUrlparam + urlHandler; 
$.ajax({ 
    type: 'POST', 
    async: false,  
    url: urlHandler, 
    data: { FileID: '' + FileID + '\'' }, 
    success: function (data) { 
     console.info(data); 
     }, 
    error: function() { 
     alert("Error occured while Downloding File"); 
    } 
    }); 

}

처리기 코드 :

를 내가 잘못 가고 어디 코드 조각을 찾아 알려주세요
public void ProcessRequest(HttpContext context) 
{ 
    //some Logic to generate file// 

string filePath = str_SaveFileLocation; 
DownloadFilePath = (str_SaveFileLocation); 
string name = Path.GetFileName(DownloadFilePath); 
string ext = Path.GetExtension(DownloadFilePath); 
string Filetype = "text/DBC"; 
context.Response.Clear(); 
context.Response.AppendHeader("content-disposition", "Downloads; filename=" + name); 
context.Response.ContentType = Filetype; 
context.Response.WriteFile(DownloadFilePath); 
context.Response.End(); 
} 

답변

0

Response.End().을 호출 할 때 ThreadAbortException은 정상입니다. documentation을 참조하십시오.

이 메서드는 ASP에서 End 메서드의 동작을 모방하여 [ThreadAbortException] 예외를 발생 시키려고 시도합니다. 이 시도가 이면 성공적입니다. 호출 스레드가 중단되어 사이트 성능에 해를 끼치게됩니다 ( ). 이 경우 End 메서드를 호출 한 후 코드가 실행되지 않습니다. End 메서드가 [ThreadAbortException]을 발생시킬 수 없으면 클라이언트 대신 클라이언트로 응답 바이트를 플러시합니다. 이 작업은 동 기적으로 이루어 지므로 사이트 성능에 해를 끼칠 수 있습니다 ( ).