注册 登录
编程论坛 ASP技术论坛

ASP中的一个表格返回值的问题

shcnlm 发布于 2010-05-12 21:57, 791 次点击
我遇到了一个问题,就是A网页中将数据库中记录数的ID作为不同表单name的名称.在B网页中获取A网页中表单的值的时候,却出现了疑问,请大家帮忙分析下.

A网页中的部分代码:
程序代码:
....
rs.open sql,conn,1,1
if not rs.EOF or rs.BOF then
%>
<tr bgcolor=LawnGreen><td WIDTH=45%>产品型号</td><td WIDTH=25%>产品名称</td><td WIDTH=20%>价格</td><td WIDTH=15%>数量</td></tr>
<%
do while not rs.EOF or rs.BOF
%>
    <tr bgcolor=LightGoldenrodYellow><td><%=rs("name")%></td>
    <td><%=rs("publish")%></td>
    <td><%=rs("price")%></td>
    <td><INPUT type="text" name=<%=rs("id")%>></td>
<%     rs.movenext
   
loop
end if
....
A网页的主要功能是,客户端填写所需求的产品数量.

B网页中的部分代码:
程序代码:
....
rs.open sql,conn,1,1
curid=0
if not rs.EOF or rs.BOF then
%>
<tr bgcolor=LawnGreen><td WIDTH=45%>手机型号</td><td WIDTH=25%>生产厂家</td><td WIDTH=15%>价格</td><td WIDTH=15%>数量</td></tr>
<%
do while not rs.eof
curid
=curid+1
if isnumeric(request(curid))<>0 then
%>
    <tr bgcolor=LightGoldenrodYellow><td><%=rs("name")%></td>
    <td><%=rs("publish")%></td>
    <td><%=rs("price")%></td>
    <td><%if request(curid)<>"" then
    Response.Write request(curid)
   
else
    Response.write
"0"
   
end if    %>
    </td></tr>
<%   
   
end if
    rs.movenext
   
loop
....

B网页是接收A网页中的数量部分来显示,并确认.

我现在疑问的是curid=curid+1  是怎样让 request(curid)达到获取A网页中输入的数量的.

我是新手,学习没多久,所以还请详细讲解.谢谢!


[ 本帖最后由 shcnlm 于 2010-5-12 21:58 编辑 ]
7 回复
#2
apull2010-05-12 23:54
request(curid)参数有问题吧,是不是应该用字符类型。
#3
sunnyxg2010-05-13 09:00
LZ:你在A网页中的 <INPUT type="text" name=<%=rs("id")%>> 这句, name=<%=rs("id")%>  它的实际值是什么呢,你不是说想客户在A页面自己填写数量吗,如果你想从数据库中读取出来应该是这样写吧: <INPUT type="text" name="curid" value=<%=rs("id")%>>。 然后你在B页面直接 Request 。还有你在A页面是循环读取数据,在B页面接收的时候要注意。
    不知能否帮助你!我们共同学习。
#4
shcnlm2010-05-13 18:12
感谢楼上二位的回答.
我再详细说明下.
1/ 以上代码是没有问题的,运行的也很正常,是从网上下载的实例.
2/ A网页中的<input type="text" name=<%=rs("id")>>这句呢,因为是循环输出,所以每条记录的输出会对应相应的表单.为了表单名称即与相应的记录相关联,又要不重复,所以就用数据记录中的ID来做为此表格的名称.
三楼的朋友可能还未完全理解我的意思.如果用写成<input type="text" name="curid" value=<%=rs("id")>>.则循环输出的表单就会是同一名称,而无法区别每条记录返回的值.  value就会有个默认值在输入栏内,会造成输入的麻烦.

这二段代码的意思是当A网页中循环输出数据库中所有的记录,并在每条记录的后面加上一个表单,当在客户端输入信息到表单里,并提交.B网页就负责接收A网页里表单的数据,并进行整理输出.
我不明白的是,A网页中没有curid这个变量,而B网页中可以用curid+1,然后再用request(curid)来获取A网页表单传送过来的数据.
我想不明白的是 数字1 是否也应该理解成变量呢?
#5
yms1232010-05-13 18:55
td><INPUT type="text" name=<%=rs("id")%>></td>
看了B页面获取传参的代码,推断rs("id")为数字型的整型编号(0,1,2,3,4,5的那种编号)
因此A页面循环会生成
<td><INPUT type="text" name=1 ></td>
<td><INPUT type="text" name=2 ></td>
<td><INPUT type="text" name=3 ></td>
....
这样的文本框

B页面curid只是一个临时变量
比如要获取文本框1
Reqest("1")
而临时变量就写为
Reqest(curid)

#6
shcnlm2010-05-13 20:21
回复 5楼 yms123
谢谢! rs("id") 的确是按照0,1,2,3,4,5的这种类型的.听你这么一讲,也明白了一点.
如果rs("id")返回的不的顺序不规则,如0,4,5,7,9 这样又该如何获取呢?
用同样的方法,可能会造成数据显示的不完整.
#7
hams2010-05-14 08:50
....
rs.open sql,conn,1,1
if not rs.EOF or rs.BOF then
%>
<tr bgcolor=LawnGreen><td WIDTH=45%>手机型号</td><td WIDTH=25%>生产厂家</td><td WIDTH=15%>价格</td><td WIDTH=15%>数量</td></tr>
<%
do while not rs.eof
curid=rs("ID")
if isnumeric(request.form(curid))<>0 then
%>
    <tr bgcolor=LightGoldenrodYellow><td><%=rs("name")%></td>
    <td><%=rs("publish")%></td>
    <td><%=rs("price")%>元</td>
    <td><%if request.form(curid)<>"" then
    Response.Write request(curid)
    else
    Response.write "0"
    end if    %>件
    </td></tr>
<%   
    end if
    rs.movenext
    loop
....
#8
yms1232010-05-14 15:27
以下是引用shcnlm在2010-5-13 20:21:52的发言:

谢谢! rs("id") 的确是按照0,1,2,3,4,5的这种类型的.听你这么一讲,也明白了一点.
如果rs("id")返回的不的顺序不规则,如0,4,5,7,9 这样又该如何获取呢?
用同样的方法,可能会造成数据显示的不完整.
那段代码的循环问题,不必这样循环考虑下面的获取方法
CycleAdd1.asp
<html>
<head>
  <title>循环获取文本框累加-提交页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script language="javascript">
//判断是否是整数
function IsInt(val)
{
   try
   {
      var temp=parseInt(val);
      return true;
   }
   catch(e)
   {
      return false;
   }
}

//表单提交方法
function form1_Submit()
{
   //循环判断文本框输入的是不是整数
   for(var i=0;i<document.form1.AddText.length;i++)
   {
       if(IsInt(document.form1.AddText[i].value)==false)
       {
          alert('第'+i+'个文本框输入的不是整数');
          document.form1.AddText[i].focus();
          return false;
       }
   }
   document.form1.submit();//提交表单
}
</script>
</head>
<body>
<form name="form1" action="CycleAdd2.asp" method="post">
<%
   '循环产生文本框
   Dim i,TextNum
   TextNum=100'文本框的数量
   For i=0 To TextNum
       With Response
          .Write "<input type=text name=AddText Value="&i&"/><br/>"
          .Write "这是第"&i&"个文本框,请输入数字<br/>"
       End With
   Next
%>
<input type="button" onClick="form1_Submit();" name="submit" value="提交">
</form>
</body>
</html>

CycleAdd2.asp
<html>
<head>
  <title>循环获取文本框累加-显示结果页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
显示累加结果:<br/>
<%
   '判断是否是整数
   Function IsInteger(Val)
      On Error Resume Next
      IF VarType(CInt(Val))<>2 Then
         IsInteger=False
      Else
         IsInteger=True
      End IF
   End Function
   Dim i,TotalNum
   TotalNum=0'累加变量赋值为0
   For i=0 To Request.Form("AddText").Count
       Dim Temp'循环临时变量
       Temp=Request.Form("AddText")(i)
       IF IsInteger(Temp)=False Then
          Response.Write "<font color=red >第"&i&"个文本框不是整数</font><br/>"
       Else
          TotalNum=TotalNum+CInt(Temp)'累加输入结果
          Response.Write "第"&i&"个文本框的数据为:"&Temp&"<br/>"
       End IF
   Next
   Response.Write "最终累加的结果为:"&TotalNum
%>
</body>
</html>
在ASP里同名的表单控件可以使用CycleAdd2的红字的方法直接获得,
此代码同样可以用在如Request("AddText").Count ,Request("AddText")(i)
或者Request.QueryString("AddText").Count,Request.QueryString("AddText")(i)

1