mapserver

简单的生活,简单的编程(Code Snippet Storage 2 进行中... ...)。

导航

统计

公告

未经许可,请不要转载我的文章。

与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类(13)

文章分类(21)

My Links

积分与排名

最新评论

Asp.net服务器控件编程(6) ViewState(二)——ViewState用法和IStateManager

        本系列的第三章我们了解了ViewState的基础知识,也大概的了解了Aspx页面的生命周期,今天继续讲解ViewState的Asp.net服务器控件中的使用和复杂的ViewState管理。
        ViewState的简单使用我们只要举个简单的例子即可:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;

namespace ClassLibrary1
{
    
public class Class1 : WebControl
    
{
        
private string _sex;
        
public string Sex
        
{
            
get
            
{
                
return _sex;
            }

            
set
            
{
                _sex 
= value;
            }

        }


        
public string Name
        
{
            
get
            
{
                
if (EnableViewState)
                
{
                    
object o = ViewState["Name"];
                    
if (o != null)
                        
return (string)o;
                    
else
                        
return string.Empty;
                }

                
else
                    
return string.Empty;
            }

            
set
            
{
                
if (EnableViewState)
                    ViewState[
"Name"= value;
            }

        }


        
protected override void RenderChildren(System.Web.UI.HtmlTextWriter writer)
        
{
            writer.Write(
"Name:" + Name + "<br>");
            writer.Write(
"Sex:" + Sex);
        }

    }

}

        效果如下:
       
        一个Aspx页面在提交和返回的过程会执行LoadViewState和SaveViewState两方法,这就是控件的状态并行化和串行化的过程,而这个过程是通过LosFormatter对象来完成的。Los 格式化程序用于高度压缩 ASCII 格式的序列化,它实现了整数、bool、字符串的串行,同时Array、ArrayList和HashTable的对象图进行了优化,控件保存在ViewState中的任何对象都必须由LosFormatter来串行化。
        ViewState属性的类型是StateBag类,改类是个字典,它通过实现ISateManager接口参与状态管理。StateBag保存键/值对,其中键是字符串而值是对象,当某个对象添加到StateBag实例中时,StateBag自动为改对象添加一个附加位,它来存储对象是否被更改过。Control的状态管理默认都是由ViewState来完成,但是,当控件定义了复杂属性时,想用ViewState来自动管理这些属性就不可能了,所以我们复杂属性的自定义类型可以通过IStateManager接口来参与状态管理。IStateManager的原形如下:
bool IsTrackingViewState { get; }
         void LoadViewState(object state);
         object SaveViewState();
        void TrackViewState();
        在.net中Control类没有从IStateManager继承下来,但是Control却实现IStateManager的原形,这里的实现就不在举例来说明,如果需要的话,可以参考《ASP.NET服务器控件与组件开发》的183页。

posted on 2006-07-11 00:11 mapserver 阅读(3827) 评论(5)  编辑 收藏 网摘 所属分类: Asp.net 服务器端控件

评论

#1楼 2006-07-11 21:34 伊人城堡[未注册用户]

我在执行vb.net 时提示配置文件无法加载,那是什么原因啊!!!!
分析器错误信息: 未能加载类型“Mod09VB.Global”。
  回复  引用    

#2楼 2006-09-17 10:26 小镇姑娘她爹      

请问mapserver,自定义属性的ViewState应该如何保存,我一直保存不住啊?
另外,楼上就像一锅米粥里的那粒老鼠屎一样...
  回复  引用  查看    

#3楼 2007-07-25 14:51 Cqq[未注册用户]

如何在控件开发中使用数组及集合呢?
能否就这两种使用举一个例子。
  回复  引用    

#4楼 2007-08-15 11:48 aaaaa[未注册用户]

未经许可,请不要转载我的文章。
yidiandouhao!!
  回复  引用    

#5楼 2008-10-30 17:43 maxsquall[未注册用户]

请问viewstate的值具体存在哪里   回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 447601 QNgGnRgH67g=



相关文章:

相关链接: