您的位置:首页 > 编程语言 > ASP

asp.net 实现无刷新上传(IFrame无刷新上传文件)

2013-01-17 15:51 746 查看
第一步,引用Jquery

<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>

第二步,添加IFrame

<form id="form2" enctype="multipart/form-data" method="post" action="UpLoad.aspx?action=UpLoad" target="iframe_upfile">
<iframe id="iframe_upfile" name="iframe_upfile" style="display:block">
</iframe>
<input name="UpFile" type="file" /><%--iframe方法中file控件是name属性,不是id属性--%>

<input id="btnup2" type="button" value="上传2" onclick="SubmitSecondForm()"/>
</form>

在这里需要注意一下几点:

1:Iframe必须在一个表单里面<from>;

2:<from>表单的action属性,指向一个页面,该页面的作用是处理上传文件;

3:<from>表单的target属性值和<iframe>的id,name属性值相同

第三步,Js方法 onclick="SubmitSecondForm()"

function SubmitSecondForm() {
$("form:eq(1)").submit();
}

在这里需要说一下,form:eq(1),是找到索引为1的form表单,并且提交。

第四步,就是UpLoad.aspx(处理上传文件的页面)

在该页面,直接写处理文件的代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string action=HttpContext.Current.Request.QueryString["action"];
if (action=="UpLoad")
{
HttpFileCollection files = HttpContext.Current.Request.Files;
if (files.Count>0)
{
Response.Write(UpLoadFile(files[0]));
Response.End();
}
}
}
}
private string UpLoadFile(HttpPostedFile pf)
{
string FileName = System.IO.Path.GetFileName(pf.FileName);
string FileExtention = System.IO.Path.GetExtension(pf.FileName);
if (FileName != "")
{
if (pf.ContentLength > 1024*1)
{
return "抱歉上传文件太大,目前支持1M文件";
}
else
{
string path = System.Web.HttpContext.Current.Request.MapPath("~/UpFile");
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
else
{
pf.SaveAs(path + "\\" + FileName);

}
if (System.IO.File.Exists(path + "\\" + FileName))
{
return "1";
}
else
{
return "上传失败";
}
}
}
else
{
return "没有找到文件";
}
}

如果以上上传后,还需要读取文件内容,并且要求返回文件内容的话,那么继续往下看:

提交表单的js代码就如下:

function SubmitThirdForm(){
$("#form1~div").appendTo("#formUpReceipt");
var file=document.getElementsByName("UpReceiptFile")[0].value;
if(file!=""){
$("form:eq(0)").submit();
tt=setInterval("MyReceiptUp()", 1000);
}
}

function MyReceiptUp(){

document.getElementById("divimagereceipt").style.display = "none";

var doc;
try {
if (document.all) {//IE
doc = document.frames["iframe_upfileRe"].document;
} else {//Firefox
doc = document.getElementById("iframe_upfileRe").contentDocument;
}
var txt = doc.body.innerHTML;
}
catch (e) {

alert("抱歉,您上传的文件太大了!");
}
}

用以上方法,就可以拿到返回值,并且付给页面上的文本框了。

但是,还有一个问题,需要提一下,如果你的Iframe表单里面,iframe包含在div层里面,是不是提交失败了,那么,就要加上下面这句:

$("#form1~div").appendTo("#formUpReceipt");

程序在运行的时候,表单里面的div层不知道什么原因跳出了表单,跑到html页面最后一个表单的外面了,所以我要再把它放进表单里面。不然程序就找不到提交内容了。

第一次写技术文章,写的乱七八糟,看不懂算了,希望能帮到需要的人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: