如何在没有回发的情况下使用JavaScript上传文件?

时间:2009-02-09 12:32:21

标签: asp.net javascript upload

我正在从事ASP.NET上的文件上传工作。我使用了<input type=file id=upload><input type=button id="btnupload" value="File Upload">

我想用JavaScript上传文件。更新面板不起作用,我不希望它回发并刷新页面。

谢谢,但如果您在javascript中有与fileUpload相关的代码,请发送给我。请帮我。

5 个答案:

答案 0 :(得分:3)

您可以使用jQuery和jQuery form plugin。我在很少的项目中使用这个组合,我没有任何问题,即使对于大文件(10mb)

<form action="form.asp" method="post">
.......
</form>
$('form').submit(function(){
 $(this).ajaxSubmit(function(data){
  $('#updateDiv').html(data); // or append/prepend/whatever
 })
 return false
})

当然,表单的操作将返回您需要更新的内容。您可能需要添加一些额外的函数来处理错误,但这应该可以正常工作

答案 1 :(得分:0)

如果您正在使用visual studio 2008(或者在05中安装了ajax),那么在输入字段周围包装一个更新面板,这将使用javascript(ajax)异步回发。

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>

答案 2 :(得分:0)

我不确定使用ASP.NET的“正确”方法,但通常你会想要你的表单,以及表单发布到的隐藏的iframe:

<script type="text/javascript">
    function handleUploadResponse(...) {
        // do something...
    }
</script>
<form method="post" action="upload.aspx" target="hiddenframe" enctype="multipart/form-data"></form>
<iframe id="hiddenframe" name="hiddenframe" style="display:none"></iframe>

当您提交表单时,这将发布到任何脚本将处理隐藏帧中的上载。完成后,隐藏框架的页面调用window.parent.handleUploadResponse(...);,调用启动上载的父页面上的handleUploadResponse()函数。

答案 3 :(得分:0)

使用jquery表单插件进行上传功能(http://www.malsup.com/jquery/form/) 使用(http://www.fyneworks.com/jquery/multiple-file-upload/)来指定要上传的多个文件

这就是它的工作原理,表单插件允许您在不刷新的情况下将数据发布到页面,多文件插件允许您通过浏览来指定多个文件。

<form id="uploadForm" enctype="multipart/form-data" method="post" action="FileHandler.ashx">
<input type="hidden" value="100000" name="MAX_FILE_SIZE"/>
File:
<input type="file" name="file"/>
<input type="submit" value="Submit"/>
</form>

所以基本上上面的小html提交到FileHandler.ashx,无论输入框中是什么(希望如此),在你的asp项目中添加一个HTTP处理程序,下面的代码很少

<%@ WebHandler Language="C#" Class="FileHandler" %>

using System;
using System.Web;
using System.IO;

public class FileHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
string strFileName = Path.GetFileName(context.Request.Files[0].FileName);
string strExtension = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
string strSaveLocation = context.Server.MapPath("Upload") + "" + strFileName;
context.Request.Files[0].SaveAs(strSaveLocation);

context.Response.ContentType = "text/plain";
context.Response.Write("success");
}

public bool IsReusable
{
get
{
return false;
}
}
}

这里缺少的就是在你的aspx页面上包含js脚本,我认为:)祝你好运

答案 4 :(得分:-1)

如果您想阻止刷新页面,请发送204 No Content HTTP标头。