百度空间 | 百度首页 
 
查看文章
 
页面传递数据小结(供参考)
2007-08-07 18:15

以通讯录为例:

一、单向一级传递

             页面a-----id------->页面b
   
   
            例1:index.asp(姓名)-----id----->particular.asp
   
             index.asp:<a href="particular.asp?id=<%rs("id")%>" target="_blank"><%=rs("name")%></a> '在新页面显示
    
             particular.asp: id=request.querystring("id") '左边的id为定义的变量;右边的id为传递的参数

           例2:index.asp(删除)----id---->del.asp
    
             index.asp:<a href="del.asp?id=<%rs("id")%>">>删除</a>            '在原窗口显示

             del.asp:           id=request.querystring("id") '左边的id为定义的变量;右边的id为传递的参数
   
                       (删除完毕后:response.redirect "index.asp")


二、单向二级传递
   
             页面a-----id---->页面b----id+表单数据---->页面c

           例3:index.asp(修改)----id---->update_form.asp----id+表单数据---->update.asp
   
    index.asp:<a href="update_form.asp?id=<%=rs("id")%>">>修改</a>           '在原窗口显示

    update_form.asp:
   
                   id=request.querystring("id")
                 
                   '根据传递过来的id,显示相应记录
   
                   <form method="post"           action="update.asp?id=<%=id%>">
   
                         姓名:<input type="text" name="name" size="20" value="<%=rs("name")%>"><br>

                         密码:<input type="password" name="pwd" size="20" value="<%=rs("pwd")%>"<br>

                         性别:<input type="radio" name="sex" value="男" <% if rs("sex")="男" then response.write "checked"%>>男        

                                <input type="radio" name="sex" value="女" <% If rs("sex")="女" Then Response.Write "Checked"%>>女<br>

                         爱好:<input type="checkbox" name="mylove" value="音乐" <% if instr(rs("mylove"),"音乐")>0 then response.write "checked"%>>音乐

                                 <input type="checkbox" name="mylove" value="计算机" <% If Instr(rs("mylove"),"计算机")>0 Then Response.Write "Checked"%>>计算机
       

                                 <input type="checkbox" name="mylove" value="旅游" <% If Instr(rs("mylove"),"旅游")>0 Then Response.Write "Checked"%>>旅游<br>

                         职业:<select name="career">

                                  <option value="学生" <% if rs("career")="学生" then response.write "selected"%>>学生</option>

                                  <option value="教师" <% If rs("career")="教师" Then Response.Write "Selected"%>>教师</option>        

    
                                  <option value="其它" <% If rs("career")="其它" Then Response.Write "Selected"%>>其它</option>
                     
                               </select><br>

                         简述:<textarea name="intro" row="4" cols="40" wrap="soft"><%=rs("intro")%></textarea><br>
                
                         <input type="botton" value="确定" onclick="check_null">

</form>

    update.asp
                        id=request.querystring("id")
             
                        (修改完毕后:response.redirect "index.asp")         

三、将数据传递给自己
  

            页面a---page_no---->页面a
  
            例:index.asp---page_no--->index.asp

A.分页程序:

           预备:

   0.recordset的4个属性

                   pagesize:每页记录数;

                   pagecount:数据页总数;

                   absolutepage:当前指针所在数据页;

                    recordcount:记录集记录总数
  
   1.默认返回记录集是不分页的,但若给pagesize赋值(rs.pagesize=5),则记录集对象(设:25条)会自动分页,并用pagecount(rs.pagecount=5)返回总页数,用recordcount(rs.recordcount=25)返回总记录数。        

   2.若想显示某一页记录,需要给absolutepage赋值(rs.absolutepage=page_no),记录集指针会指向该数据页首条记录。

   3.数据页结尾判断:当到达记录集结尾或显示够pagesize指定的数目后,循环应终止。

           程序分析:

   1.定义变量page_no,确定显示第几页数据页。

              dim page_no

              if request.querystring("page_no")="" then

                  page_no=1

              else

                  page_no=Cint(request.querystring("page_no")) 'cint将字符串转化为整数

              end if

   2.建立recordset对象

              set rs=server.createobject("adodb.recordset")

              strsql="select * from users order by submit_date desc"

              rs.open strsql,db,1           '因为要分页显示,所以要用键盘指针

      3.分页显示记录集数据页    

              rs.pagesize=5           '设置每页显示5条记录

              dim page_total,data_count
  
              data_count=rs.recordcount           '数据页记录总数

              page_total=rs.pagecount             '数据页总页数

              rs.absolutepage=page_no '设置当前显示第几页

              '用循环显示记录

               dim i

               i=5              '用i控制显示记录,i应与rs.pagesize一致

               do while not rs.eof and i>0           '数据页结尾判断
   
                  i=i-1  
               %>
   
               输出记录...
   
              <%
   
               rs.movenext
              loop
              %>
  
   4.输出页码信息

            共5页/25条信息 【首页】【上一页】【下一页】【尾页】第2页/共5页

             <%
               response.write "<P>共"& page_total &"/"& data_count &"条信息"
    
             '以下输出首页、上一页、下一页、尾页链接

             dim numpre,numnext '定义2个变量,分别表示上一页和下一页的页码

             numpre=page_no-1

             numnext=page_no+1
   
             if page_no<>1 then '如果不是首页,则可能是尾页或某一页
                response.write "&nbsp;&nbsp;<a href='index.asp?page_no=1'>【首页】</a>"
                response.write "&nbsp;&nbsp;<a href='index.asp?page_no="& numpre &"'>【上一页】</a>"
             end if
  
             if page_no<>page_total then '如果不是尾页,则可能是首页或某一页
                response.write "&nbsp;&nbsp;<a href='index.asp?page_no="& numnext &"'>【下一页】</a>"
                response.write "&nbsp;&nbsp;<a href='index.asp?page_no="& page_total &"'>【尾页】</a>"
             end if

             '以下输出 第2页/共4页
             response.write "&nbsp;&nbsp;第"& page_no &"页/共"& page_total &"页"
             %>

B.表单将数据传给自己(模糊查询:查找多个关键字)

           1.定义关键字keyword
  
           2.表单设置
                 <form action="" method="post">
                       输入关键字:<input type="text" name="key" value="<%=keyword%>"> '保留表单状态value="<%=keyword%>"
                                   <input type="submit" value="提交">
                 </form>    
    
           3.keyword判断
  
             dim keyword

             if trim(request.form("keyword"))<>"" then
                   keyword=request.form("key")
             else
                   keyword=""
             end if

             if keyword="" then
                  strsql="select * from users"
             else
                 strsql="select * from users where name like '%"& keyword &"%'"

                 '如果上面这句红色sql语句换成下面的蓝色代码,就变成多个关键字模糊查询

                  Dim arrKeyword,numKeyword,I,condition
                  arrKeyword=Split(keyword," ")    'split函数会把keyword拆分成一个数组
                  numKeyword=Ubound(arrkeyword)    'numKeyword返回数组的最大下标  
                 '当只有一个关键字时
                 
condition=name & " like '%" & arrKeyword(0) & "%'"
                 '如果只有一个关键字,就不执行下面的循环了
                  For I=1 To numKeyword
                         condition=condition & " And name like '%" & arrKeyword(I) & "%'"
                  Next
                  '下面组成完整的Select语句
                  strSql="Select * From users Where " & condition

             end if

四、双向一级数据传递

         当你在通讯录中,浏览某一页,或在查询的结果中浏览某一页时(如文章开头图片所示)。

         如果你在某条记录后点“删除”(或“修改”)时,你删除了一条记录,那么删除完毕后会自动返回首页index.asp,可是这时看到的记录是第一张数据页中的记录,而不是我们删除记录所在的数据页的记录!为了解决这个问题,需要使用双向数据传递!

   页面a----id、session("page_no")=page_no---->页面b----page_no---->页面a

A.修正在浏览时数据页显示问题

       分析:我们可以将page_no在打开首页时事先保存在session中;点“删除”返回时,就令page_no为session("page_no")中的值。

       index.asp中page_no判断:

       <%
         dim page_no
         if session("page_no")="" then '首次启动页面,令page_no=1,同时保存到session("page_no")中
                page_no=1
                session("page_no")=page_no
         elseif request.querystring("page_no")<>"" then       '不是首次启动,当用户点下方的数据页链接时就令page_no为指定数据页,同时保存在session中
                page_no=Cint(request.querystring("page_no"))
                session("page_no")=page_no
         else                                   '若用户点“删除”返回时,就令page_no为session中的值。
                page_no=session("page_no")
         end if
       %>

B.修正在进行查询时数据页显示问题

分析:我们用类似的方法,设置变量keyword,然后进行判断

        1.首次打开页面,自然默认显示所有记录,此时令keyword="",并保存到session中;
        2.如果用户输入查找关键字后,就令keyword为指定关键字,并保存到session中;
        3.若用户输入""或空格,此时也显示所有记录,令keyword="",并保存到session中;

          用vartype函数来判断表单提交状态:
   
           vartype(request.form("keyword"))=8 '表示用户点“提交”按钮

           vartype(request.form("keyword"))=0 '表示用户首次打开,或从其它页面返回

        4.如果用户是从删除页(或修改页)重定向到index.asp,则令keyword="",并保存到session中

index.asp中keyword判断:

<%
        dim keyword
        if trim(request.form("keyword"))<>"" then       '情况2
               keyword=request.form("key")  
               session("keyword")=keyword
        elseif trim(request.form("keyword"))="" and vartype(request.form("keyword"))=8 then '情况3
               keyword=""
               session("keyword")=keyword
        else                                   '情况1,4
               keyword=session("keyword")
        end if


%>

页面数据传递综合:综合起来就是一个完整的通讯录

       补充:

1.在“添加记录”页面add.asp,由于添加记录后希望新添加的记录显示在数据页的首页头条,所以在返回前:
   
                session("keyword")=""
                session("page_no")=1

2.当输入关键字(或"")提交后,不管原来的用户正在查找第几页,都应该指定为新的结果记录集的首页,vartype(request("keyword"))=8,所以在首页的page_no判断中应增加一项判断:
  
         elseif vartype(request.form("keyword"))=8 then
                page_no=1
                session("page_no")=page_no

3.index.asp页面简析

                    判断page_no------>判断keyword------>分页显示记录集数据页记录----->输出页码信息


类别:知识积累 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu