2012-08-17 3 views
1

나는 비슷한 질문을 찾아 다녔지만 불행히도 나를 위해 꽤 효과가없는 것 같습니다.양식을 제출 한 후 모달 창 닫기

내가하는 일 : 문서를 업로드 할 수있는 링크가있는 기본 페이지가 있습니다. 해당 링크를 클릭 할 때 간단한 업로드 양식을 모달 창을 엽니 다 : 나는 컨트롤러 내 _uploadDocument 메소드를 호출하고 싶습니다 양식의 제출에

<div id="uploadResults"> 
@using (Html.BeginForm("_uploadDocument", "Request", FormMethod.Post, new { id = "uploadDoc", enctype = "multipart/form-data" })) 
{ 
    <input name="eGuid" value="@ViewBag.eGuid" id="eGuid" type="hidden" /> 
    <input name="result" id="result" value="@ViewBag.result" type="hidden" /> 
    <label for="attachment">Attachment:</label><input type="file" name="attachment" id="attachment" /> 
    <br /> 
    <input type="submit" name="submit" value="Upload" class="txtButton" /> 
} 
</div> 

합니다. 업로드가 성공하면 모달 창을 닫고 상위 창이 다시 나타납니다. 오류가 있으면 모달 창을 유지하고 알림 텍스트를 표시하십시오.

httppost (사과, 나는 여러 가지 방법을 시도하고 그래서 당신은 몇 가지 주석 비트를 볼 수 있습니다)에 대한 나의 컨트롤러 : 내 모달 창 내에서

[HttpPost] 
     public void _uploadDocument(string eGuid, HttpPostedFileBase attachment) 
     { 
      // store result txt 
      string result = ""; 

      // check for uploaded file 
      if (attachment != null && attachment.ContentLength > 0) 
      { 
       // get filename 
       var uploadedFileName = Path.GetFileName(attachment.FileName); 
       var newFileName = eGuid + "_" + uploadedFileName; 

       // store to the shared directory 
       var path = System.Web.Configuration.WebConfigurationManager.AppSettings["UploadDirectory"]; 
       var savePath = Path.Combine(path, newFileName); 
       try 
       { 
        attachment.SaveAs(savePath); 
        result = "success"; 
       } 
       catch 
       { 
        result = "There was an issue uploading your file"; 
       } 
      } 
      else 
      { 
       result = "No file was chosen for upload"; 
      } 

      ViewBag.result = result; 
      ViewBag.eGuid = eGuid; 
      //return PartialView("_uploadDocument"); 
      //return Json(new { result = result}); 
      //return Json(result); 
     } 

입니다 위의 양식, I 나는 데이터가 다음 성공의 기능 불을 통과 직렬화하지만 만약 문서가 (그래서 모달 창에는 문서가 업로드되지 않고 종료) 업로드하지 않습니다 -

$("#uploadDoc").submit(function (e) { 
     $.post(this.action, { eGuid: $('#eGuid').val(), attachment: $('#attachment') }, function() { 
      $("#dialog5").dialog('close'); 
      //alert("In"); 
      //return false; 
     }); 
     //$.post(this.action, { eGuid: $('#eGuid').val(), attachment: $('#attachment') }); 
     return false; 
    }); 

내 결과 다음 jQuery를 시도했다.

그때 위와 같이 코드를 사용하는 경우 문서가 업로드하지만 난 후 제출 빈 흰색 화면으로 이동하고있어 ...

나는 확실히 어떤 포인터를 감사하겠습니다!

UPDATE 여기 상위 페이지에서 모달 창을 열고 코드입니다 :

당신은 등 HTML 5, iframe이 해킹을 사용하지 않고 아약스를 통해 파일을 업로드 할 수 없습니다
// person look-up modal window 
    $(function() { 
     $('#dialog5').dialog({ 
      autoOpen: false, 
      width: 400, 
      resizable: false, 
      title: 'Upload Document', 
      dataType: "json", 
      modal: true, 
      open: function (event, ui) { 
       var updateArea = $(this).data('area'); 
       //alert(updateArea); 
       $(this).load('@Url.Action("_uploadDocument", "Request")' + '?eGuid=' + updateArea); 
      }, 
      cancel: function (event, ui) { 
       $(this).dialog("close"); 
      } 
     }); 

     $('.attachDocument').live("click", function() { 
      var field = this.name; 
      $('#dialog5').data('area', field).dialog('open'); 
     }); 
    }); 
+0

내 목적은 부모 창입니다 아직 저장되지 않을 수 있습니다 데이터를 (내가 새로 고침/다시 게시/등 원하지 않는)가 포함되어 있습니다. 어쩌면 내 접근 방식이 잘못되었습니다. 본질적으로 부모 서식을 방해하지 않고 서버에 문서를 업로드하는 방법이 필요합니다. –

답변

0

그것은 나에게 나타나는 가장 좋은 건 것 uploadify 또는 plupload과 같은 업 로더를 사용해야합니다.

Binding-httppostedfilebase-using-ajax-beginform이 문제를 해결하는 방법에 대한 좋은 제안이있는 비슷한 질문입니다.

+0

나는 분명히 그 인상을 받았습니다. 내가 당신의 링크를 확인하겠습니다 -하지만 나는 이것과 같은 희망을 만들어 다른 링크를 보았다 : http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax –

+0

난 것입니다 좀 더 둘러 보아라. 너가 무엇이든을 발견하면 나에게 알려줘. –

0

올바른 길을 걷고있는 것처럼 보였지만 버렸습니다.

void에서 return 문을 올바르게 발행 할 수 없습니다. void 대신 uploadDocument 메서드를 bool으로 만들고 성공 상태를 반환한다고 생각하십니까? 당신은 같은 것을 할 수

이 방법이에 대한

$.post(this.action, { eGuid: $('#eGuid').val(), attachment: $('#attachment') }, function (data) { 
    if(data == true) { 
    $('#uploadResults').hide(); 
    } 
}); 
+0

감사합니다. 나는 확신 할 수없는 많은 다른 것들을 시도했다. 앞서 'bool'컨트롤을 변경하고 위의 변경 사항과 함께 반환 값을 설정했습니다. 불행히도 이것은 단지 'True'라는 단어가있는 흰색 화면으로 나를 데려갑니다. –

+0

코드 작성기에 뭔가 빠졌습니다.어떤 시점에서 'Respose.Redirect' 발사가 있습니다. Windows는 독자적으로 변경되지 않습니다. 더 많이 볼 수 있을까요? – Wesley

+0

정말 제가 생각할 수있는 유일한 다른 것은 부모 페이지에서 모달 창을 여는 코드입니다. 그것이 도움이 될 것이라고 생각하면 –

관련 문제