ASP.NET的ViewState可以保存同一个页面间的多个请求间的状态,这种状态的保存对于数据的处理比较常用,我们以表示层尽量少访问数据库的思想,把数据库中读取出来的数据存在ViewState中,然后重用这些数据。
例如有这样的需求。首页index.aspx中有5个链接(这5个链接可能会根据数据库中的数据的变化而变化),这5个链接中都有onclick事件,这5个onclick事件由js负责自动点击,每隔n秒点击一次,并向指定的details.aspx页面里传递一个参数,然后由details.aspx根据index.aspx中传过来的参数返回相应的详细数据。由于这5个链接是相对比较固定,所以可以用ViewStae保存这5个ID的数据。可以参见以下实例,以下是details.aspx页的code behind代码,它处理index.aspx?postID=xx的请求。
protected void Page_Load(object sender, EventArgs e)
{
//先清空所有的HTML标记(自定义类中的方法)
Util.HtmlUtil.ClearAllHTML();
string strPostID = Request.QueryString["postID"] == null ? "" : Request.QueryString["postID"].ToString();
PostCtrl postCtrl = new PostCtrl();
Post post = null;
if (ViewState[strPostID] == null)
{
//如果视图中不存在这笔记录,则从数据库中读取
post = postCtrl.GetSinglePostByPostID(Int32.Parse(strPostID));
ViewState.Add(strPostID, post);
}
else
{
//如果视图中已经存在这笔记录,那么直接从视图中读取,减少数据库的访问量
post = ViewState[strPostID] as Model.Post;
}
Response.Write(string.Format("{0}", post.Summary + " <a href='read.aspx?id="+ post.ID +"' target='_blank'>阅读全文</a>"));
Response.End();
}
说明:示例中的Post是一个文章的实体,PostCtrl类是页面层和数据层的桥梁,都自定义的。
浙公网安备 33010602011771号