1.信息分页
两种方式,一种简单前后页分页、一种数字分页。
/// <summary>
/// 获取总记录数
/// </summary>
/// <returns></returns>
public int GetRecordCount()
{
string sql = "select count(*) from Student";
return Convert.ToInt32(SqlHelper.ExecuteScalar(sql, CommandType.Text));
}
/// <summary>
/// 根据指定的范围,获取指定的数据
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public List<UserInfo> GetPageList(int start, int end)
{
string sql = "select * from (select * ,row_number() over (order by UserId) as num from Student) as t where t.num>=@start and t.num<=@end";
SqlParameter[] pars = {
new SqlParameter("@start",SqlDbType.Int),
new SqlParameter("@end", SqlDbType.Int)
};
pars[0].Value = start;
pars[1].Value = end;
DataTable da = SqlHelper.GetDataTable(sql, CommandType.Text, pars);
List<UserInfo> list = null;
if (da.Rows.Count > 0)
{
list = new List<UserInfo>();
UserInfo userInfo = null;
foreach (DataRow row in da.Rows)
{
userInfo = new UserInfo();
LoadEnity(userInfo, row);
list.Add(userInfo);
}
}
return list;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using _0715StudentProject.Model;
using _0715StudentProject.BLL;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _2020_07_18_NewList : System.Web.UI.Page
{
public string StrHtml { get; set; }
public int PageIndex { get; set; }
public int PageCount { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
int pageSize = 5;
int pageIndex;
if (!int.TryParse(Request.QueryString["pageIndex"], out pageIndex))
{
pageIndex = 1;
}
UserInfoService userInfoService = new UserInfoService();
int pagecount = userInfoService.GetPageCount(pageSize);//获取总页数
PageCount = pagecount;
//对当前页码值范围进行判断
PageIndex = pageIndex < 1 ? 1 : pageIndex;
PageIndex = pageIndex > pagecount ? pagecount : pageIndex;
PageCount = pagecount;
List<UserInfo> list = userInfoService.GetPageList(pageIndex, pageSize);//获取分页数据
StringBuilder sb = new StringBuilder();
foreach (UserInfo userInfo in list)
{
sb.AppendFormat("<li><span>{0}</span><a href='#'target='_blank'>{1}</a></li>", userInfo.RegTime.ToShortDateString(), userInfo.UserName);
}
StrHtml = sb.ToString();
}
}
2.IsPostBack
protected void Page_Load(object sender, EventArgs e)
{
//如果隐藏的值不为空,表示用户单击了提交按钮发出了POST请求
//if (!string.IsNullOrEmpty(Request.Form["idPostBack"]))
//IsPostBack:如果是Post请求该属性的值为true,如果是GET请求该属性的值为false
//IsPostBack:是根据___VIWESTATE隐藏域进行判断,如果是POST请求那么该隐藏域的值
//回提交到服务器端,那么就不能用该属性进行判断是POST请求还是GET请求。因为去掉form
//标签的runat="server",那么就不会再产生____VIEWSTATE隐藏域了。
if (IsPostBack)
{
InsertUserInfo();
}
3.ViewState状态保持
ViewState:实现状态保持的对象.
隐藏域
protected void Page_Load(object sender, EventArgs e)
{
int count = 0;
if (ViewState["count"] != null)
{
count = Convert.ToInt32(ViewState["count"]);
count++;
Count = count;
}
ViewState["count"] = Count;
//当我们把数据给了ViewState对象后,该对象回将该数据进行编码,然后存到
// __VIEWSTATE隐藏域中,然后返回会给浏览器。
//用户通过浏览器单击‘提交’按钮,回向服务器端发送一个POST请求那么服务端自动
//接受__VIEWSTATE隐藏域的值,并且再反编码,重新赋值给ViewState对象
}
4:客户端状态保持(cookie)重点
cookie:一小段文本,明文。存储在客户端的浏览器内存里面或者磁盘。cookie是跟网站相关,百度可以往客户端写cookie,sina也可写cookie,但是百度只能读取跟百度网站相关的cookie。cookie会随着请求网站一块发送到后台【如果请求百度的时候,那么就把百度的cookie放到请求报文里面去,然后发送到后台。】www.xxx.com
cookie可以设置一个Path来限制某个路径下面的页面才会把cookie发送到后台。比如:请求图片,请求一个css、js,为了提高性能,可以通过 path设置页面的所在路径,来控制cookie的发送。
Cookie的域:浏览器往后台发送数据时候,要把cookie放到请求报文里面去,发送到后台。
问题:请求是子域的网页,那么主域的cookie会不会发送到后台呢?
答案:是的。一块发送。如果请求时主域页面,子域的cookie是不会发送到后台的。
如果子域想让请求主域页面的时候也一块发送到后台,设置当前Cookie的域为主域可以了。
cookie是通过响应报文的方式写到前台。最终写入Cookie是通过响应报文头来的 ;cookie有限制(大多数浏览器)。