2011-03-07 3 views
2

jQuery AjaxForm plugin 을 사용하여 사용자가 서버에로드하도록 선택한 이미지 미리보기를 만듭니다. HTTP 처리기를 사용하여 이미지 미리보기에 사용되는 임시 이미지 파일을 만듭니다. FileUpload 컨트롤의 클라이언트 측 'onchange'이벤트에 대한 응답으로 이미지 미리보기가 성공적으로 만들어집니다.ASP.NET 문제에서 jQuery AjaxForm을 사용합니다.

전체 폼 (UploadImageToServerStep1.aspx)을 서버로 보내는 단추가 있습니다. 서버 측 Click 이벤트에서 다른 페이지 (UploadImageToServerStep1.aspx2)로 컨트롤을 전송하려고하면 컨트롤이 다른 페이지 코드 파일 (컨트롤이 해당 페이지 Page_Load 이벤트에 도착 함)에 도달하지만 페이지는 그렇지 않습니다. 대신 - 참조 페이지가 표시됩니다 (UploadImageToServerStep1.aspx) (컨트롤은 해당 페이지의 페이지로드 이벤트로 이동하지 않습니다).

UploadImageToServerStep1.aspx의 JS 코드 : < 스크립트 TYPE = "텍스트/자바 스크립트">

VAR 미리 = { ImagePreview : 함수 (imageId) {

var formId = '<%= Form.ClientID %>'; 
    var fileUploadId = '<%= FileUpload1.UniqueID %>'; 
    var action = $('#' + formId).attr('action'); 
    var imageName = $("input[serverId = 'FileUpload1']").val(); 
    $('#' + formId).attr('action', './HttpHandlers/ImagesHandler.ashx?action=imagePreview&f=' + fileUploadId + '&i=' + imageName); 
    $('#' + formId).ajaxForm(function() { 
     $('#' + imageId).attr('src', './HttpHandlers/ImagesHandler.ashx?action=imagePreview&f=' + fileUploadId + '&i=' + imageName); 
     $('#' + imageId).show(); 
     $('#' + formId).attr('action', action); 
    }); 
    $('#' + formId).submit(); 
} 

}; </script>/

의 HttpHandler에서

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

     FileUpload1.Attributes.Add("onchange", "preview.ImagePreview('htmlImgPreview');"); 
     FileUpload1.Attributes.Add("serverId", "FileUpload1"); 

    } 
} 


protected void btnNext_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     Response.Redirect("UploadImageToServerStep2.aspx"); 
     //Server.Transfer("UploadImageToServerStep2.aspx"); 
    } 
} 

UploadImageToServerStep1.aspx.cs

에서 :

case "imagePreview": 
      string f = context.Request.QueryString.Get("f"); 
      string i = context.Request.QueryString.Get("i"); 

      const string uploadImageTempPath = "~/Images/TempImages/"; 
      if (!string.IsNullOrEmpty(context.Request.QueryString.Get("i")) && context.Request.Files[f] != null) 
      { 
       HttpPostedFile file = context.Request.Files[f]; 
       SaveImage(context, file, uploadImageTempPath, i); 
      } 
      context.Response.ContentType = GetContentType(context.Session["fileName"].ToString()); 

      if (context.Session["fileName"] == null || context.Request["i"] == null) 
      { 
       return; 
      } 

      byte[] byteArray1 = 
       System.IO.File.ReadAllBytes(
        context.Request.MapPath(string.Format("{0}{1}", uploadImageTempPath, context.Session["fileName"]))); 
      context.Response.BinaryWrite(byteArray1); 
      break; 

    } 

사람이 그 행동의 원인이 무엇인지 적어주세요 수 나는이 문제를 어떻게 해결할 수 문제

감사합니다.

답변

0

t ajax 호출에 대한 응답으로 response.redirect를 수행하기 위해 브라우저는 일반적인 동기 요청과 동일한 방식으로 작동하지 않습니다. 그러나 JS 측에서는 응답을 받고 그걸로 무언가를 할 수 있습니다. 나는 이것이 당신을 도울 것이라고 믿습니다.

Returning redirect as response to XHR request

관련 문제