asp.net webform页面状态自动加载和保存方法 (1/2)

首先定义一个特性(attribute)。我会将这个特性放到需要自动加载和保存的属性上,以便将这些需要处理的属性从所有的页面属性中筛选出来,做进一步处理。这个特性的定义如下:


/// <summary>
/// 自动保存属性. 能够实现字段或属性值的自动保存和加载. 该属性只在非静态字段或属性上才能生效.
/// </summary>
/// <remarks>

/// 自动保存属性. 在页面类的属性上面加上该属性. 可以使得该字段或属性能够自动保存和自动加载.

/// 但是该属性必须是可序列化的. 否则抛出异常. 该属性只在非公有字段或属性上才能生效.

/// </remarks>
[attributeusage(attributetargets.property | attributetargets.field, allowmultiple = false, inherited = false)]
public class autosaveattribute : attribute
{
/// <summary>
/// 初始化创建一个 <see cref="autosaveattribute"/> 类的实例. 使得具有该属性的类的属性具有自动保存的特性.
/// </summary>
public autosaveattribute() { }
}

 

然后就是重写页面生命周期的某些事件,加入我们的处理代码。处理的过程为:㈠检索当前页面类型并将其需要处理的属性筛选出来(初始化过程);㈡将筛选出来的属性做保存或赋值操作(关键点)。

 

㈠筛选需要处理的属性,将其缓存到一个静态字典中,在需要的时候再取出来。这个初始化的代码如下:


/// <summary>
/// 用户控件类型及自动保存属性成员缓冲字典
/// </summary>
protected static dictionary<type, memberinfo[]> cachedic = null;
 
/// <summary>
/// 获得成员列表的绑定标识.
/// </summary>
protected static bindingflags flag;
 
/// <summary>
/// 初始化 <see cref="basepage"/> 类.
/// </summary>
static basepage()
{
cachedic = new dictionary<type, memberinfo[]>();
 
flag = bindingflags.public | bindingflags.nonpublic | bindingflags.instance | bindingflags.getfield | bindingflags.getproperty | bindingflags.flattenhierarchy;
}
 
/// <summary>
/// 当前页面的类型
/// </summary>
protected type currtype = null;
/// <summary>
/// 初始化当前页面的缓冲字典
/// </summary>
protected void initcachedic()
{
// 获得当前实例类型
currtype = page.gettype();
 
memberinfo[] mems = null;
 
if (!cachedic.trygetvalue(currtype, out mems))
{
// 自动保存属性处理
var list = currtype.getmembers(flag)
.where(p => attribute.isdefined(p, typeof(autosave), false))
.toarray();
cachedic[currtype] = list;
}
}

 

可以看到,在调用调用初始化函数 initcachedic 时,系统会做两件事:缓存当前页面类型、筛选需要处理的属性。筛选属性反射操作,执行一次后不再重复。

 

首页 1 2 末页

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 缓存
, static
, null
, 属性
类型
,以便于您获取更多的相关知识。

时间: 2024-09-20 00:23:44

asp.net webform页面状态自动加载和保存方法 (1/2)的相关文章

jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)_jquery

本文实例讲述了jQuery+ajax实现滚动到页面底部自动加载图文列表效果.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&qu

ASP.Net刷新页面后自动滚动到原来位置方法汇总

本文给大家汇总了3种ASP.Net实现的刷新页面后自动滚动到原来位置方法,十分的简单实用,有需要的小伙伴可以参考下.     在网上搜索之后总结了三种方式: 1.设置Page中的MaintainScrollPositionOnPostback属性为true A>.页面里有MaintainScrollPositionOnPostback,默认是false,设为true即可(页面级)   代码如下: <%@ Page Language="C#" AutoEventWireup=

Android实现ListView分页自动加载数据的方法_Android

Android应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页的形式来展示数据,个人觉得这样会有更好的用户体验.因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.例如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个"查看更多"按钮,用户点击后,加载下一页数据. 下面通过一个Demo来展示ListView功能如何实现:该Demo通过在ListVie

Android实现ListView分页自动加载数据的方法

Android应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过分页的形式来展示数据,个人觉得这样会有更好的用户体验.因此,很多应用都是采用分批次加载的形式来获取用户所需的数据.例如:微博客户端可能会在用户滑动至列表底端时自动加载下一页数据,也可能在底部放置一个"查看更多"按钮,用户点击后,加载下一页数据. 下面通过一个Demo来展示ListView功能如何实现:该Demo通过在ListVie

js ajax实现页面滚动自动加载内容图片的例子

页面滚动到底部自动 Ajax 获取文章  代码如下 复制代码 var _timer = {}; function delay_till_last(id, fn, wait) {     if (_timer[id]) {         window.clearTimeout(_timer[id]);         delete _timer[id];     }       return _timer[id] = window.setTimeout(function() {        

SharePoint 2013 新建项目字段自动加载上次保存值

1.点击进入NewForm.aspx页面,编辑页面,插入Script Editor WebPart,如下图: 2.插入后如下图,拖动AutoRecord WebPart到脚本编辑器上面,防止因为加载顺序的问题无法找到页面上的DOM: 3.在脚本编辑器中添加脚本的外部引用,和需要执行的方法,如下图: 4.去引用的外部脚本中,编写我们的脚本,如下图: 原理就是用脚本在现有的Save按钮前添加一个新的Save按钮,同时隐藏掉默认的,新按钮的功能就是将要保存的字段值写到Cookie里面,并执行旧按钮的保

jquery的getjson实现页面不刷新加载剩余数据方法事件

有了"用JS将一个div插入到指定的一个div中或后面"这篇文章的指引基础,下面还是以情景的模式来叙述怎样用JS做到不刷新加载剩余数据. 案例情景: 一个评论页面,先只显示了10条数据,我要通过js+ajax获取数据无刷新页面异步加载显示下一个10条数据,接着触发一次.显示10条,直到全部显示完整. 解决原理步骤: 1.首先要取得下一个10条评论数据字符串 2.然后将数据赋值到原先10条评论后面 3.同时更新剩余评论数显示.判断如果剩余数少于0则隐藏图标 完整HTML代码:(程序后台代

当滚动条滚动到页面底部自动加载增加内容的js代码_javascript技巧

1,注册页面滚动事件,window.onscroll = function(){ }; 2,相关获取页面高度.滚动条位置.文档高度的函数: 复制代码 代码如下: //获取滚动条当前的位置 function getScrollTop() { var scrollTop = 0; if (document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.s

ASP.Net刷新页面后自动滚动到原来位置方法汇总_实用技巧

在网上搜索之后总结了三种方式: 1.设置Page中的MaintainScrollPositionOnPostback属性为true A>.页面里有MaintainScrollPositionOnPostback,默认是false,设为true即可(页面级) 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"  Mai