在asp.net 2.0中,可以结合dhtml来实现在用户上传完一个文件后,再点“继续上传”,而动态增加上传文件框
首先是前台的页面
<script language="javascript" type="text/javascript">
 function addFile(max)
 {  
  var file = document.getElementsByName("File"); 
  if(file.length == 1 && file[0].disabled == true)
  {
   file[0].disabled = false;
   return;
  }
  if(file.length < max)
  {
   var filebutton = '<br /><input type="file" size="50" name="File" class="Button" />';
   document.getElementById('FileList').insertAdjacentHTML("beforeEnd",filebutton);
  }
 }
</script>
</head>
<body>
    <form id="form1" runat="server" method="post" enctype="multipart/form-data">
    <table class="Text" border="0" cellpadding="3" bgcolor="Black" cellspacing="1">
  <tr bgcolor="white">
   <td>所属分类:</td>
   <td width="90%">
    <asp:DropDownList ID="ddlCategory" runat="server" SkinID="ddlSkin" Width="336px"></asp:DropDownList>
   </td>
  </tr>
  <tr bgcolor="white">
   <td valign="top">选择照片:</td>
   <td width="90%">
    <table border="0" cellpadding="0" cellspacing="0">
     <tr>   
      <td valign="top">
       <p id="FileList"><input type="file" disabled="disabled" size="50" name="File" class="Button" /></p>
      </td>
      <td valign="top"><input type="button" value='增加一张照片' class="Button" οnclick="addFile(<%= MAXPHOTOCOUNT %>)" /><font color="red">(最多上传 <%=MAXPHOTOCOUNT%> 张照片)</font><br /> 单击此按钮增加一个上传照片按钮。如果文件的名称或者内容为空,则不上传该照片。</td>
     </tr> 
    </table>
   </td>
  </tr>     
  <tr bgcolor="white">
   <td>&nbsp;</td>
   <td width="90%">
    <asp:Button ID="btnCommit" runat="server" Text="提交" SkinID="btnSkin" Width="100px" OnClick="btnCommit_Click" />&nbsp;<asp:Label ID="lbMessage" runat="server" CssClass="Text" ForeColor="Red"></asp:Label>
   </td>   
  </tr>
 </table>
这里使用了一个javascript,来动态生成多个上传文件框,注意这里用了一个DHTML的函数insertAdjacentHTML,用法如下

加html内容(insertAdjacentHTML和insertAdjacentText)
    dhtml提供了两个方法来进行添加,insertAdjacentHTML和insertAdjacentText
insertAdjacentHTML方法:在指定的地方插入html标签语句。
    原型:insertAdjacentHTML(swhere,stext)
    参数:
    swhere:指定插入html标签语句的地方,有四种值可以用:
              1.beforeBegin:插入到标签开始前
              2.afterBegin:插入到标签开始标记后
              3.beforeEnd:插入到标签结束标记前
              4.afterEnd:插入到标签结束标记后
              stext:要插入的内容
      例:var sHTML="<input type=button οnclick=" +     "go2()" + " value='Click Me'><BR>"
      var sScript='<SCRIPT DEFER>'
      sScript = sScript +     'function go2(){ alert("Hello from inserted script.") }'
      sScript = sScript + '</script' + '>';
      ScriptDiv.insertAdjacentHTML("afterBegin",sHTML + sScript);
      在html正文中加入一行:
    <DIV ID="ScriptDiv"></Div>
     最终变成:
    <DIV ID="ScriptDiv">
       <input type=button οnclick=go2() value='Click Me'><BR>
       <SCRIPT DEFER>
         function go2(){alert("Hello from inserted sctipt.")}'
       </script>
     </DIV> 
     insertAdjacentText方法与insertAdjacentHTML方法类似,只不过只能插入纯文本,参数相同

接下来就可以用FOR循环去处理了
protected void btnCommit_Click(object sender,EventArgs e)
 {
  if(ddlCategory.SelectedIndex <= 0) return;
  ///获取上载文件的列表
  HttpFileCollection fileList = HttpContext.Current.Request.Files;
  if(fileList == null) return;
  Album album = new Album();
  try
  {   ///上载文件列表中的每一个文件
   for(int i = 0; i < fileList.Count; i++)
   {   ///获取当前上载的文件
    HttpPostedFile postedFile = fileList[i];
    if(postedFile == null) continue;
    ///获取上载文件的文件名称
    string fileName = Path.GetFileNameWithoutExtension(postedFile.FileName);
    string extension = Path.GetExtension(postedFile.FileName);
    if(string.IsNullOrEmpty(extension) == true) continue;
    ///判断文件是否合法
    bool isAllow = false;
    foreach(string ext in AjaxAlbumSystem.ALLOWPHOTOFILELIST)
    {
     if(ext == extension.ToLower())
     {
      isAllow = true;
      break;
     }
    }
    if(isAllow == false) continue;    
    ///获取基于时间的文件名称
    string timeFilename = AjaxAlbumSystem.CreateDateTimeString();
    ///获取保存在数据库中的URL
    string url = "Photoes/" + timeFilename + extension;
    ///获取全路径
    string fullPath = Server.MapPath(url);
    ///上载文件
    postedFile.SaveAs(fullPath);
    ///添加文件到数据库中
    album.AddPhoto(fileName,url,postedFile.ContentType,postedFile.ContentLength,
     Int32.Parse(ddlCategory.SelectedValue));    
   }
  }
  catch(Exception ex)
  {   ///显示上载文件的操作失败消息
   lbMessage.Text = "上载文件错误,错误原因为:" + ex.Message;
   return;
  }

asp.net 2.0中允许一次上传多个文件的设计相关推荐

  1. ASP.NET 2.0使用FileUpload控件上传文件示例

    在ASP.NET 2.0中使用FileUpload服务器控件很容易的就能将文件上传到服务器,一个简单的例子如下: aspx: 程序代码 <%@ Page Language="C#&qu ...

  2. 如何在命令行中使用 ftp 命令上传和下载文件

    转摘:https://linux.cn/article-6746-1.html 本文中,介绍在 Linux shell 中如何使用 ftp 命令.包括如何连接 FTP 服务器,上传或下载文件以及创建文 ...

  3. Java中Jsp和Servlet上传和下载文件

    上传: 前端页面: <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...

  4. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  5. asp.net 2.0中设定默认焦点按钮

    在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些 ...

  6. asp.net 2.0中的弹出对话框

    在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: btnClick.Attributes.Add("onclick", "return ...

  7. 在ASP.NET 2.0中建立站点导航层次

    站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你 ...

  8. asp.net 2.0中一次性更新所有GRIDVIEW的记录

    在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中 的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldataso ...

  9. asp.net 2.0 中GridView里设置日期格式

    在asp.net 1.0 中的datagrid 中 设置日期字段格式时用 DataFormatString="{0:yyyy-MM-dd}"即可.    在gridview 中设置 ...

最新文章

  1. linux注销、关机、重启
  2. linux java jdk_神级程序员教你如何10分钟在Linux上安装java的JDK?
  3. 简单排查定位linux系统的性能瓶颈
  4. 纷享车链AutoChain首创之数据保险柜的解读
  5. oracle客户端没有deinstall.bat,Oracle数据库11gR2的卸载 - deinstall
  6. 计算机原理与技术索引的应用,经常学一点计算机底层原理系列之索引
  7. Servlet 实现訪问量的统计小案例
  8. WebService远程调试
  9. Regularized least-squares classification(RLSC)
  10. 面向对象编程,设计原则,设计模式
  11. 史上最全最详细的APP运营推广策划方案
  12. 软件写注册表设置开机自启动
  13. vue中如何引入公共样式的的styl文件
  14. Python关键字keyword
  15. 制作u盘winpe启动盘_制作U盘启动盘
  16. CCS之产生两个正弦波的仿真
  17. oa办公系统文件存取错误_如何处理OA系统在线阅读或编辑文档时提示“文件存取错误”的问题...
  18. 《有一种错过叫作遗憾》
  19. 2018传智黑马前端视频教程36期视频与源码完整版
  20. AutoHotKey 新手入门教程

热门文章

  1. python 访问网站 json_python爬虫用selenium访问一个网址返回的是个json字符串,怎么获取这个json字符串?...
  2. 如何腾出计算机内存,win10这几个步骤,瞬间为c盘腾出多G内存
  3. 使用screen的时候出现了如下错误: Cannot open your terminal '/dev/pts/0' - please check.
  4. Vue中子组件如何向父组件传递数据?
  5. Django讲课笔记01:Django简介
  6. Python案例:用米粒填充国际象棋盘
  7. MyBatis框架笔记02:接口方式使用MyBatis
  8. bzoj3190 [JLOI2013]赛车 半平面交
  9. 【英语学习】【Level 07】U07 Stories of my Life L1 Going to the Countryside
  10. 【英语学习】【WOTD】scavenger 释义/词源/示例