asp实现表格式录入
上一段html表格,现表是格式我从一个老同事的ASP文件里抠出来的。他管这叫“表格式录入”页面——一个能让用户一次性填多行数据的录入界面。跟普通表单不同,现表这种页面允许用户点“添加行”按钮,格式动态插入新行,录入然后一次性提交所有数据到数据库。现表 ASP实现这个功能,格式核心就三件事:客户端JS操作表格行,录入服务端Request.Form读取多值,现表再循环写库。格式先说客户端。录入我见过最土的现表写法,是格式直接修改innerHTML往tbody里拼姓名 部门 工资 入职日期 张三 销售部 8500 2021-03-15 李四 技术部 12000 2019-07-01 。比如: ```javascript function addRow() { var tbody = document.getElementById('dataRows'); var newRow = ' '; tbody.innerHTML += newRow; } ``` 这种写法简单,录入但有个坑——如果之前已经填了数据,innerHTML重绘会把旧值冲掉。所以后来我改用insertRow和insertCell,保留已有输入: ```javascript function addRow() { var tbl = document.getElementById('tblData'); var row = tbl.insertRow(-1); var c1 = row.insertCell(0); c1.innerHTML = ''; var c2 = row.insertCell(1); c2.innerHTML = ''; } ``` 服务端接收时,ASP会把这些字段打包成数组。假设你填了三行,名字分别是“张三”“李四”“王五”,那么Request.Form("name")返回的是一个数组,下标从1开始(ASP的坑,不是0)。你得用循环去取: ```asp <% For i = 1 To Request.Form("name").Count Response.Write Request.Form("name")(i) & " - " & Request.Form("dept")(i) & "
" Next %> ``` 这里有个细节容易翻车。如果用户只填了第二行和第三行,第一行留空,ASP照样会把空字符串算进数组里。所以循环里得先判断Len(Trim(...)) > 0再写库,否则数据库里全是空记录。 实际项目里,表格式录入最常见的场景是批量录入成绩、库存盘点、或者订单明细。我之前给一家小工厂做过一个配件入库页面,他们每天要录几百条零件信息,用这种表格式页面,操作工能一次性粘贴Excel里的数据,再逐行检查修改,比一条条提交快了三倍。 但ASP写这个有个天生的毛病——没有ViewState,不像ASP.NET那样能记住行数。用户加了三行,填了一半,不小心点了提交但验证没过,页面刷新后所有行就消失了。要解决这个,得把已经填的值在服务端重新输出到表格里。做法是判断Request.Form("name")是否存在,然后循环生成行,再把值塞回input的value属性。代码会变得啰嗦,但能救回用户数据。 另一个细节是删除行。别光顾着加行,得给每行配个“删除”按钮。事件绑定别用onclick="deleteRow(this)"这种传this的,在IE里会报错。用行索引更稳: ```javascript function deleteRow(btn) { var row = btn.parentNode.parentNode; row.parentNode.removeChild(row); } ``` 最后提一句,现在都2025年了,要是新项目我不会选ASP。但老系统还在跑,改造成本高,所以这招儿还有用。真遇到性能问题,比如一次提交上千行,ASP循环写库会超时,那就得改用SQL批量插入或存储过程。不过那是另一个话题了。