前言:这节课老师主要讲网页当中内容的分页效果,自己写一个分页控件。

内容

  1.首先写出HTML代码:

 <div id="pager">
<%=GetPagerHtml()%>
3 </div>

  2.CSS代码:

 #pager {
margin-top: 10px;
}
#pager div {
float: left;
margin-right: 10px;
width: 55px;
height: 26px;
background-color: #019875;
text-align: center;
line-height: 26px;
color:#fff;
}
#pager a {
color: #fff;
display: block;
text-decoration: none;
}
#pager .nonbg {
background-color:#91CEBE;
}

  3.SQL语句实现分页效果:

 select top 10 *
from
(
select ROW_NUMBER() over (order by NewsId) as RowNumber,NewsId,Title,CreatTime,NewsClass,ViewCount from RNews
)A
where RowNumber > 10*(2-1)

  4.网页中的代码实现,涉及的细节比较多,包括字符串拼凑,分页页数计算等:

 private int PageCount = ;
private int PageSize = ; //一页多少条数据
private int _pageIndex;
public int PageIndex
{
get
{
try
{
_pageIndex = Request.QueryString["page"] == null ? : Convert.ToInt32(Request.QueryString["page"].ToString());
}
catch
{
_pageIndex = ;
}
return _pageIndex;
}
set { _pageIndex = value; }
}
public int GetRecordCount() //获得总页数
{
string sqlStr = "select count(*) from RNews";
int i = Convert.ToInt32(SqlHelper.ExecuteScalar(CommandType.Text, sqlStr, null));
return i;
}
      /// <summary>
/// 获取分页
/// </summary>
/// <returns></returns>
public string GetPagerHtml()
{
StringBuilder sb = new StringBuilder();
sb.Append(@"<div><a href=""/RNewsM.aspx?page=1"">首页</a></div>");
if (PageIndex == )
{
sb.Append(@"<div class=""nonbg"">上一页</div>");
}
else
{
sb.Append(string.Format(@"<div><a href=""/RNewsM.aspx?page={0}"">上一页</a></div>", PageIndex - ));
}
if (GetRecordCount() % PageSize == )
{
PageCount = GetRecordCount() / PageSize;
}
else
{
double d = GetRecordCount() / PageSize;
PageCount = Convert.ToInt32(Math.Ceiling(d));
}
if (PageIndex == PageCount)
{
sb.Append(@"<div class=""nonbg"">下一页</div>");
}
else
{
sb.Append(string.Format(@"<div><a href=""/RNewsM.aspx?page={0}"">下一页</a></div>", PageIndex + ));
}
sb.Append(string.Format(@"<div><a href=""/RNewsM.aspx?page={0}"">尾页</a></div>", PageCount));
sb.Append(string.Format(@"<div class=""nonbg"">{0}/{1}</div>", PageIndex, PageCount));
return sb.ToString();
}

  5.Session,cookie:请求信息(请求报文):Request;响应信息(响应报文):Response;请求报文+响应报文=上下文对象context。

 //登录页面
Session["username"]=username; //登录进去的页面
if(Session["username"]==null)
{
Response.Redirect("Login.aspx");
}

  session返回的key是存储在服务端浏览器的缓存里面的,所以一旦页面关闭之后,key就不存在了,session就取不到。放在session中的数据较安全,但是数据存储到服务端太多,响应会太慢。一般使用cookie加密。

 //登录页面
Response.Cookies["username"].Value=username;
Response.Cookies["pwd"].Value=pwd;
Response.Redirect("xxx.aspx"); //登陆后的页面
if (Request.Cookies["username"] == null || Request.Cookies["pwd"] == null)
{
Response.Redirect("Login.aspx");
}

  客户端向服务端发送请求,服务端返回cookie的值给客户端,默认情况下(没有设置过期时间的情况下),保存在浏览器的缓存里面。如果cookie设置一个过期时间,那么cookie就保存在客户端的硬盘上,直到过期时间达到或者手动的去删除cookie,它才会消失。

//设置登录信息过期时间
Response.Cookies["username"].Expires = DateTime.Now.AddHours();

后记:看懂代码,多练习。

ASP.NET动态网站制作(25)-- ADO.NET(4)的更多相关文章

  1. ASP.NET动态网站制作(3)--css(2)

    前言:css分为四次课讲完,第一节课内容见ASP.NET动态网站制作(2)--css(1),接下来的内容会涉及到定位.浮动.盒子模型(第二次课).css的具体应用(第三次课).css3(第四次课).今 ...

  2. ASP.NET动态网站制作(24)-- ADO.NET(3)

    前言:ADO.NET的第三节课.今天主要讲SQL Helper. 内容: 1.DataReader和DataSet的区别: (1)DataReader是一行一行地读,且只能向前读:DataSet是一次 ...

  3. ASP.NET动态网站制作(22)-- ADO.NET(1)

    前言:这节课开始真正地学习WEB开发,ADO.NET就是一组允许.NET开发人员使用标准的.机构化的,甚至无连接的方式与数据交互的技术.所属的类库为:System.Data.dll. 内容: 1.AD ...

  4. ASP.NET动态网站制作(23)-- ADO.NET(2)

    前言:这节课老师请高级班的E老师过来代课,还是接着老师讲的内容继续深入,修改了上节课老师写的部分代码. 内容: 1.数据库本质就是一个软件,这个软件帮助我们把数据有序地存储起来,当我们需要数据的时候帮 ...

  5. ASP.NET动态网站制作(26)-- Ajax

    前言:这节课讲解关于Ajax的相关内容. 内容: 1.当点击页面中的一个按钮提交数据或请求数据的时候,整个页面的信息都会提交(不管信息是否是提交或者请求的数据,页面中所有的数据都提交),这样耗用的时间 ...

  6. ASP.NET动态网站制作(20)-- C#(3)

    前言:C#的第三节课,继续上次课的内容,依旧围绕基础的只是讲解. 内容: 1.StringBuilder类:由于string类一旦创建,则不能更改.如果做字符串拼凑的话,将会非常耗费空间,如: str ...

  7. ASP.NET动态网站制作(1)--html

    前言:正式上课的第一课,讲的是前端部分的最基础内容:html. 前端:html,css,js 数据库:sql server 动态部分:.net,c#... IIS(Internet Informati ...

  8. ASP.NET动态网站制作(0)

    前言:一直想系统地学习一下网站建设的相关内容,看过相关的书籍,也跟着视频学过,但总觉得效率不高,学过的东西印象不深刻,或许还是自己动手实践的少.无意中免费听了一堂讲ASP.NET网站建设的课,觉得性价 ...

  9. ASP.NET动态网站制作(28)-- 三层框架(2)

    前言:三层框架的第二节课,继续上次课的内容. 内容: 1.三层框架的使用目的:可以将视图层和业务逻辑层及实体层分开,可以提高代码的扩展性,安全性,可以实现程序的低耦合性. 2.GetModel方法及G ...

随机推荐

  1. fedora25 采用二进制包安装mysql5.5.49

    #添加用户和组 groupadd mysql useradd -s /sbin/nologin -g mysql -M mysql /etc/passwd id mysql #安装依赖包 [root@ ...

  2. 字典对象的 Pythonic 用法(上篇:转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498528588&src=3&ver=1&signature=DfFeOFPXy44ObCM ...

  3. git fetch 的简单用法:更新远程代码到本地仓库及冲突处理

    Git中从远程的分支获取最新的版本到本地方式如下,如何更新下载到代码到本地,请参阅ice的博客基于Github参与eoe的开源项目指南方式一1. 查看远程仓库 1 2 3 4 5 6 $ git re ...

  4. gcc编译错误:DSO missing from command line

    在用gcc 编译连接的时候,可能会遇到类似以下的错误: /usr/bin/ld: test_desktop_utils-test-desktop-utils.o: undefined referenc ...

  5. Netty4详解三:Netty架构设计(转)

    http://blog.csdn.net/suifeng3051/article/details/28861883?utm_source=tuicool&utm_medium=referral ...

  6. mpvue + iview 实现跨平台开发(App,Wap,微信小程序)

    1.安装 vue-cli 脚手架 npm install --g vue-cli 2.创建项目 vue init mpvue/mpvue-quickstart test-wxapp cd test-w ...

  7. 攻克了Cocoapods Undefined symbols for architecture _OBJC_CLASS_xxxx的问题,辛苦死我了,记录下之后有空在研究

    网上找了一大包将尽3个小时没有解决,原本以为是我升级到10.10的原因,把cocoapod 重装 stackoverflow google 用尽了也不知道为啥 结果是这个样子的 编译出现这个.... ...

  8. 【Java】Java_16 控制循环结构Break、Continue、Return

    1.break break用于完全结束一个循环,跳出循环体.不管是哪种循环,一旦在循环体中遇到break,系统将完全结束该循环 在Java中是的标签定义,标签就是一个紧跟着英文冒号(:)的标识符 代码 ...

  9. 通过浏览器查看nginx服务器状态配置方法

    通过浏览器查看nginx服务器状态配置方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了通过浏览器查看nginx服务器状态配置方法,本文讲解开启nginx-status的配 ...

  10. 远程调用——hessian使用入门

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...