2010-01-07 3 views
5

나는 jQuery ajax와 같은 방식으로이 작업을 수행하는 방법에 대해 궁금합니다. 지금 나는 jQuery UI 대화 상자 팝업이 있고 그것에 HTML 입력 파일이있다.jQuery를 통해 파일을 업로드하는 방법은 무엇입니까?

사용자가 가져 오기를 클릭하면 jQuery를 사용하여 서버에 아약스 게시물을 게시하려고합니다.

내 동작보기로 파일을 전달하는 방법을 잘 모르겠습니다.

는 지금은

그래서
public ActionResult Import(HttpPostedFileBase file) 

내가 jQuery를하고 함께 HttpPostedFileBase에 전달하는 방법을 잘 모르겠습니다 그래서 내 컨트롤러에서 다음이

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{%> 
    <br /> 
    <p><input type="file" id="file" name="file" size="23 accept="text/calendar"></p><br /> 
    <p><input type="submit" value="Upload file" /></p>   

<% } %> 

이 그것을 다시 전체 게시물을하고있다 jQuery에서 enctype = "multipart/form-data"을 설정하는 방법.

편집이 좋아 잘 jQuery를 양식 플러그인은 길을 가야하는 것 같다.

$('#frm_ImportCalendar').livequery(function() 
{ 
    var options = { 
     dataType: 'json', 
     success: function(response) 
     { 
      alert(response); 
     } 
    }; 

    $(this).ajaxForm(options); 
}); 

내 json이 작동하지 않는 이유가 궁금 해서요. 누군가 당신이 언급 한대로 그대로 사용할 수 없습니다. 누군가가 json을 사용할 수 있었던 다른 링크를 확인하고 있습니다.

Lck에서 ajax 제출 메소드 전에 .submit을 사용하는 이유는 확실하지 않습니다.

편집

어떻게 내 사전 배열을 반환하는 파일 업로드 JSON 결과를 바꿀 수 있을까?

 Dictionary<string, string> result = new Dictionary<string, string>(); 
     result.Add("Msg", "Success!!"); 
     result.Add("Body", calendarBody); 

// how can I change this? 
    return new FileUploadJsonResult { Data = new { message = string.Format("{0} uploaded successfully.", System.IO.Path.GetFileName(file.FileName)) } }; 

답변

4

jQuery Form Plugin을 사용하면 비동기 파일 업로드를 수행 할 수 있습니다. 체크 아웃 아래의 링크를

jQuery를 양식 플러그인 - 코드 샘플 - 파일 업로드 http://jquery.malsup.com/form/#file-upload

행운을 빕니다!

0

Dominic에서 제안한대로 jQuery Form plugin을 사용하십시오. 이미 작성한 양식이 이미 올바르게 작동해야합니다.

<% using (Html.BeginForm("Import", "Controller", FormMethod.Post, new { id = "asyncForm", enctype = "multipart/form-data" })) 

및 데이터 게시 할 jQuery를 양식을 사용 : 그냥 정확히 식별 할 수있는 ID를 추가 파일을 을 업로드 형태의 반환 데이터 형식 JSON하지

$(document).ready(function(){ 
    $('#asyncForm').submit(function(){ 
     $(this).ajaxSubmit({ 
      beforeSubmit: function(){ 
       //update GUI to signal upload 
      } 
      data: { additional = 'value' }, 
      dataType: 'xml', 
      success: function(xml){ 
       //handle successful upload 
      } 
     }); 
    }); 
}); 

참고. 컨트롤러 메소드에서 XML 또는 HTML을 응답으로 사용하십시오.

+0

콜백 함수에 메시지를받을 수 있습니다. 나는 비슷한 것을했지만 ID ID는 지정하지 않았다. 지금까지 내가 가지고있는 것을 편집하십시오. – chobo2

+0

Javascript는 보안상의 이유로 파일을 업로드 한 요청의 데이터 형식으로 JSON을 받아 들일 수 없습니다 (jQuery 양식 웹 페이지에 설명되어 있음). JSON과 jQuery로 사용하기가 아주 간단한 XML을 사용 하시길 바랍니다. 또는 개행 문자로 구분 된 일반 텍스트로 된 값을 사용하는 것이 좋습니다. .ajaxSubmit을 명시 적으로 사용했습니다. 왜냐하면 내가 양식을 사용하여 프로젝트의 일부 코드에서 예제를 얻었 기 때문입니다. 어쨌든 코드와 실질적으로 동일해야합니다. – LorenzCK

+0

이 XML은 어떻게 생겼을까요? Json 결과로 변환 한 사전 컬렉션을 게시하여 어떻게 XML로 변환 할 수 있습니까? – chobo2

0

jQuery Form plugin과 사용자 정의 JsonResult 클래스를 사용하여 AJAX를 통해 파일을 업로드 할 수 있습니다 (here).

사용이 당신의 사전

return new FileUploadJsonResult { Data = new { Msg = "Success!!", Body = calendarBody } }; 

처럼 뭔가를 반환하고 난 그냥 권자 JSON을 반환하지 않습니다 왜 물어 여기에오고

success: function(result) { 
    $("#ajaxUploadForm").unblock(); 
    $("#ajaxUploadForm").resetForm(); 
    alert(result.Msg); 
} 
+0

$ .growlUI (null, result.message);는 무엇입니까? 나는 growlUI가 무엇인지, 그리고 그것이 내가 필요한 것인가 확실치 않습니다. 또한 iframe을 true로 설정해야합니까? – chobo2

+0

또한 jason 키와 값은 무엇입니까? 데이터 또는 메시지입니까? 수정 사항을 참조하십시오. – chobo2

+0

예, iframe이 true 여야합니다. $ .growlUI는 필요하지 않으며, 그저 특별한 애니메이션 알림입니다. –

관련 문제