2011-03-02 39 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概述了方便做到这一点