asp.net 动态添加多附件上传.

最近有人问起动态多文件上传,想要做到类似于邮箱添加附件的效果,这个功能其实比较简单,就是往form中添加file元素。在用户选择完文件后,再添加一个file控件,由于file控件过多,视觉上不好看,所以隐藏之前的控件,保持页面上只有一个控件,同时把文件名添加到附件列表中。

 注意:页面上初始的file控件必须有runat="server"标志。也就是说,这个页面上必须至少有一个runat="server"的file控件,否则后台接收不到Request.Files。

< FORM  id ="form1"  runat ="server" >
            
< DIV  id ="div1" >
                
< INPUT  ID ="File1"  TYPE ="file"  NAME ="File1"  runat ="server" >
                
< INPUT  TYPE ="button"  VALUE ="添加附件"  onclick ="javascript:AddFile();" >
                
< INPUT  TYPE ="button"  VALUE ="删除附件"  onclick ="javascript:RemoveFile();" >
                
< ASP:LISTBOX  id ="ListBox1"  Width ="200px"  Height ="100px"  runat ="server" ></ ASP:LISTBOX >
                
< ASP:BUTTON  id ="Button1"  runat ="server"  Text ="保存"  Width ="60px" ></ ASP:BUTTON >
            
</ DIV >
            
< ASP:LITERAL  ID ="lResult"  Runat ="server" ></ ASP:LITERAL >
             
        
</ FORM >

 

< SCRIPT language = " javascript " >
<!--
 
function  AddFile()
 {    
  
    
var  file  =  document.getElementById( " div1 " ).firstChild;
    
if (file.value  ==   "" )
    {
        alert(
" 请选择文件! " );
        
return ;
    }
    
    
var  ary  =  file.value.split( " / " );
    
var  filename  =  ary[ary.length - 1 ];
    
    
var  bAddFile  =   true ;
    
if (CheckOptionsExists(filename,document.getElementById( " ListBox1 " )))
    {
        
        alert(
" 文件已经存在列表中! " );
        div1.removeChild(file);
        bAddFile 
=   false ;
        
    }
    
    
    
var  f  =  document.createElement( " input " );
    f.type 
=   " file " ;
    f.name 
=   " file "
    
    div1.insertBefore(f,div1.firstChild);
    
    
if ( ! bAddFile)
    {
        
return
    }
    
var  o  =   new  Option();
    o.innerText 
=  filename;
    o.value 
=  file.uniqueID;
    document.getElementById(
" ListBox1 " ).appendChild(o);
    
    file.style.display 
=   " none " ;
    
     
    
 }
 
 
function  RemoveFile()
 {
    
var  lst  =  document.getElementById( " ListBox1 " );
    
if (lst.selectedIndex  ==   - 1 )
    {
        alert(
" 请选择要删除的附件! " );
        
return ;
    }
    
    
var  id  =  lst.value;
    div1.removeChild(document.all[id]);
    lst.removeChild(lst.options[lst.selectedIndex]);
    div1.firstChild.style.display 
=   "" ;
     
 }
 
 
// 检查选项是否存在.
  function  CheckOptionsExists(value,ddl)
 {
    
for ( var  i = 0 ;i < ddl.options.length;i ++ )
    {
        
if (ddl.options[i].innerText  ==  value)
        {
            
return   true ;
        }
    }
    
return   false ;
 }
 
 
 
// -->
         </ SCRIPT >

 

 

后台代码就比较简单了。没有过多的处理,只是一个简单的保存。

 

private   void  Button1_Click( object  sender, System.EventArgs e)
        {
             
            
for ( int  i = 0 ;i < Request.Files.Count;i ++ )
            {
                
if (Request.Files[i].ContentLength  > 0 )
                {
                    
string  filename  =  System.IO.Path.GetFileName(Request.Files[i].FileName);
                    Request.Files[i].SaveAs(Server.MapPath(filename));
                    
this .ListBox1.Items.Add( new  ListItem(filename,filename));
                }

                
this .lResult.Text  =   " 保存成功! " ;
            }
            
        }

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值