2011-03-02 60 views
2

我有一個窗體,其中用戶輸入其數據及其圖像。這個表單將在一個jQuery對話框中。我想知道,如果上傳圖像然後將其發送到服務器保存在硬盤上,而不會丟失該對話框,則會打印文件上傳的消息。如果是的話,那我該如何使用jquery ajaxform plugin。我使用asp.net mvc。我可以上傳文件在jQuery對話框在asp.net mvc

我曾嘗試如下

我查看

<div id="dialog" title="Dialog Title" style="display: none"> 
     <div id="Jobs"> 
     <form id="frmupload" enctype="multipart/form-data" method="post"> 
      <input id="File1" type="file" name="file" /> 
      <input id="Button1" type="submit" value="Upload" name="button" /> 
      </form> 
     </div> 
    </div> 

我的JQuery

function dialogs(id) { 
     $(function() { 
      var ph = $("#Jobs");   
       ph.dialog({ 
        width: 700, 
        modal: true, 
        show: 'slide', 
        closeText: 'hide', 
        draggable: false, 
        resizable: false 
       }); 
      //}); 
     }); 
    } 

    function clik(id) { 
     dialogs(id); 
     return false; 
    } 
var options = { 
      url: "/Post/UploadImages"    
     };  

     $('#frmupload').ajaxForm(function (options) { 
      //alert(data); 
      alert("Thank you for your comment!"); 
     }); 

回答

4

看看下面的例子,它使用AJAX文件上傳(不幸的是,它看起來像沒有給出JavaScript):

http://jquery.malsup.com/form/#file-upload

基本上,你需要在你的options對象的iframe屬性:

var options = { 
    url: "/Post/UploadImages", 
    iframe: true 
}; 

美中不足的是,插件預計包裹在<textarea></textarea>標籤的響應(因爲響應類型必須爲HTML或XML)。

public class FileUploadJsonResult : JsonResult 
{ 
    public override void ExecuteResult(ControllerContext context) 
    { 
     this.ContentType = "text/html"; 
     context.HttpContext.Response.Write("<textarea>"); 
     base.ExecuteResult(context); 
     context.HttpContext.Response.Write("</textarea>"); 
    } 
} 

然後在你的控制器動作:

return new FileUploadJsonResult { Data = new { /* ... */ } }; 
您可以通過引入自己的類型響應處理的AJAX文件上傳,如博客文章 here概述了方便做到這一點