独上高楼网站
  •    你所在位置:首页 VS.netASP.net开发〉ASP.NET高级教程—显示留言
  • ASP.NET高级教程—显示留言
  • 作者:5do8  文章来源:http://www.blueidea.com/  发布日期:2007-06-25  浏览次数:815
  • 打印这篇文章
  • 显示当前页的留言信息:

    使用一个asp:repeater控件显示信息,我没有使用dataset 的分页是因为那样很浪费资源,每次把全部数据都读取的说,我是只读当page页面数据的:index.aspx

     dim PAGENO as integer
     dim pagestr as string = request.QueryString("page")
     if not  IsNumeric(pagestr)  then
      PAGENO = 1
     else
      PAGENO =   int32.parse(Microsoft.VisualBasic.Left(pagestr, 10))
     end if
     dim PAGELIST AS integer = 6 '每页的信息条数

    为了防止page参数的非法性,我们做了一点额外的工作:转换类型到int32合法。

    然后读取当页信息:

     rpt_postlist.datasource = CoutData.CoutGuestData(PAGENO,PAGELIST ) '这里返回了dataset对象
     rpt_postlist.databind()

    其中CoutData::CoutGuestData也是共享方法:

    '返回计数,
     shared Function CoutGuestData (pagei as integer,optional PAGESIZE as integer = 6 ) as DataSet
      dim PAGENO as integer = pagei
      dim STARTNO as integer = PAGESIZE *( PAGENO-1 )      '得到开始的记录
      dim SQLSTR  as string

      SQLSTR = "select top "& PAGESIZE &" [book_id],[user_name],[book_title], [book_contents],[book_type],[book_time] from [szd_book] "
      if PAGENO <> 1 then
       SQLSTR &= "where [book_id] not in( select top "& STARTNO &" [book_id]  from [szd_book] order by [book_id] desc) " 
      end if
      SQLSTR &=  " order by [book_id] desc"
      Dim conn as New conn()
      return conn.GetDataSet(SQLSTR)
     End Function

     shared Function CoutBbcode (ByRef strs as string ,Optional htmlorubb as integer  = 0 ) as string
      if htmlorubb = 0  then
       return CjjerBase.bbCode.GetBbcode(strs)
      else
       return strs
      End if
     End Function

     

    这个方法比较简单,思路就是根据当前页计算记录的开始条 + 每页数,出现意外及时变换sql,然后读取数据库,返回dataset。

    图示:

    显示当前的分页信息:

     pageinfo.text = CoutData.CoutPageLabel( PAGENO ,PAGELIST)

    CoutData::CoutPageLabel

     Shared Function  CoutPageLabel( pagenoi as integer ,optional PAGESIZE as integer = 6 )  as string
      dim PAGENO as integer
      dim pagestr as string = pagenoi 
      PAGENO =   int32.parse(Microsoft.VisualBasic.Left(pagestr, 10))
      dim ALLNO as integer 
      dim RECORDSESQL as string = " select count([book_id]) from [szd_book]"
      Dim conn as New conn()
      ALLNO = conn.ExecuteScalar(RECORDSESQL)
      conn.close()
      dim STARTNO as integer = PAGESIZE *( PAGENO-1 )      '得到开始的记录
      dim COUNTPAGE AS integer = CInt (  ALLNO / PAGESIZE  + 0.5 )  '得到总页数
      
      if ( ALLNO mod PAGESIZE ) = 0 then  COUNTPAGE -= 1
      dim PAGESTRS AS string
      if PAGENO > COUNTPAGE then  PAGENO = COUNTPAGE
      PAGESTRS = "总数:" & ALLNO & "页数:" & COUNTPAGE & ",当前第" & PAGENO & "页,"
      dim pageI as integer
      for pageI = 1 to COUNTPAGE
       if pageI = PAGENO
        PAGESTRS &=   pageI   
       else
        PAGESTRS &= " " & pageI & " "
       end if
      next
      return  PAGESTRS
     End Function

    思路就是:先获取总数,规划根据总数和每页的信息数目for循环即可。

    图示:

    post.aspx

    基本的东西在下载的列表文件就有,此处不再追加。我说说核心的东西:

    第一行:

    ValidateRequest主要是检验提交的数据中有html标签的话是不是要处理的bool值,这里false,就是可以提交html标签的意思+几个验证控件+表单控件+验证码组成了这个页面的展示过程,其中验证码图片是:

    inc/imgcheck.aspx的内容:



    post.aspx的page_load():

    先判断数据验证合法不,合法的话检验验证码:

    function postimgcheck(session_str as string ,session_value as string) as Boolean
     return session(session_str) = session_value
    end function

    这些都合法的话添加都数据库:CinData::CinGeustData

    Imports System
    Imports System.Web
    imports System.data
    imports System.data.oledb

    namespace CJJERGUESTBOOK
    Public Class CinData
     Shared Sub CinGeustData(user_name as string ,book_title as string ,book_contents as string)
      dim conn as new Conn()
      dim sqlstr as string = "insert into [szd_book](user_name,book_title,book_contents,book_ip) values(@user_name,@book_title,@book_contents,@book_ip)"
      dim cmd as  new oledbcommand
      cmd = conn.oledbcommand(sqlstr)
      cmd.parameters.add("@user_name", user_name)
      cmd.parameters.add("@book_title",book_title)
      cmd.parameters.add("@book_contents",book_contents)
      cmd.parameters.add("@book_ip", HttpContext.Current.Request.UserHostAddress)
      conn.executenonquery(cmd)
     End Sub
    End Class
    End namespace

     

    就这点东西,演示图片:

    本节完。

    程序打包下载:点击下载

    本教程未完,待续,陆续更新

    经典论坛讨论帖:
    http://www.blueidea.com/bbs/NewsDetail.asp?id=2591191

    sub post_but_click(s as object,e as eventargs)
     dim sessionstr as string ="imgcheck"
     if not postimgcheck(sessionstr,imgcheck.text)
      imgcheckinfo.isvalid = false
     else
      if isValid  then
      post_mess.innerhtml ="谢谢您的留言" 
    CinData.CinGeustData(server.HtmlEncode(user_name.text),server.HtmlEncode(book_title.text),ly.text)

      response.redirect ("index.aspx")
      end if

     end if
    end sub

  • 打印这篇文章
  • 与本文主题相关的文章
  • 返回首页