jquery + .net mvc3.0 + 无刷新上传文件

 ----- 概述 -----
1.HTML中 id="form_upload" 表单的target 属性要指向页面中不可见的 iframe( id="hidden_frame")
  这样提交到 ifrmae 中的请求会刷新这个不可见的帧

2.使用 TestSubmit() 方法提交数据就是因为方便传一些自定义的参数(currentPath)
3.服务器端的代码自己去研究吧!注意的是如果成功需要调用一个回调函数 UploadCallback
  刷新页面,这个回调函数要写在响应流中
---------------- 

一、HTML 内容
    <!--begin 上传文件-->
    <div id="divFileUpload" icon="icon-up" style="padding:5px;width:400px;height:200px;">
        <form action="UploadFile.aspx" id="form_upload" name="form_upload" encType="multipart/form-data"  method="post" target="hidden_frame" >  
            <input type="file" id="file_upload" name="file_upload" style="width:450">  
            <span id="upload_msg"></span>  
     <input type="button" value="上传" onclick="TestSubmit();">
            <br>  
            <font color="red">支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传</font>                
            <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>  
        </form>
    </div>
    <!--end 上传文件-->

二、页面脚本
<script language="javascript">
//上传后的回调函数(上传文件的输出流调用)
function UploadCallback(msg)
{
    //    document.getElementById("form_upload").outerHTML = document.getElementById    $("form_upload").outerHTML;
    if(msg=="false")
    {
        alert("文件上传失败!");
        return;
    }
    $("#form_upload").val("");
    $('#divFileUpload').dialog('close');
    ReloadGridData();
}

function TestSubmit()
{
  $("#form_upload")
  .first()
  .attr("action", "UploadFile.aspx?currentPath=" + m_currentPath)
  .submit();
}
</script>

三、在 Global.asax 文件中配置的路由

      routes.MapRoute(
        "Default01", // 路由名称
        "{controller}/{action}.aspx/id", // 带有参数的 URL
        new { controller = "Explorer", action = "Index", id = UrlParameter.Optional } // 参数默认值
      );

四、.NET MVC 中控制器内的方法

public class ExplorerController : Controller
{
    /// <summary>
    /// 上传文件
    /// </summary>
    /// <returns></returns>
    [HttpPost]
    public string UploadFile(string currentPath)
    {
      if (currentPath.IsNullOrEmpty())
        return "false";

      string filename = string.Empty;
      string path = string.Empty;
      foreach (string upload in Request.Files)
      {
        if (!Request.Files[upload].HasFile())
          continue;

        filename = Path.GetFileName(Request.Files[upload].FileName);
        path = Path.Combine(currentPath.UrlDecode(), filename);
        Request.Files[upload].SaveAs(path);
        if (System.IO.File.Exists(path))
        {
          Response.Output.WriteLine("<script language='javascript'>parent.UploadCallback('true')</script>");
          return "true";
        }
        else
        {
          Response.Output.WriteLine("<script language='javascript'>parent.UploadCallback('false')</script>");
          return "false";
        }
      }

      return "false";
    }
}

posted @ 2011-08-24 16:45  肚肚  阅读(585)  评论(0编辑  收藏  举报