惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tenable Blog
WordPress大学
WordPress大学
小众软件
小众软件
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
量子位
有赞技术团队
有赞技术团队
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
F
Fortinet All Blogs
S
Schneier on Security
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
F
Full Disclosure
Scott Helme
Scott Helme
GbyAI
GbyAI
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
C
Check Point Blog

博客园 - mapserver

MicroOrm.Net和现有ORM产品的对比 MicroOrm.Net(8) Table.Query() - Distinct、Skip & Take MicroOrm.Net(7) Table.Query() - Group By & Having MicroOrm.Net(6) Table.Query() - Join & Order By MicroOrm.Net(5) Table.Query() - Select MicroOrm.Net(4) Table.Query() - Where MicroOrm.Net(3) Database、Table、Column、Expression、Math&MathE MicroOrm.Net(2) 基础及动态特性 MicroOrm.Net(1) 总览 Asp.net服务器控件编程(5) 复杂属性 Asp.net服务器控件编程(4) 呈现 Asp.net服务器控件编程(3) ViewState(一)——asp.net控件的精华之一 Asp.net服务器控件编程(2) 来做个热身运动吧 Asp.net服务器控件编程(1) 开篇、基础 Asp.net服务器控件编程 总览 TextDataSource(3) — 请把我的数据更新回去 TextDataSource(2) — 翠花,上“数据” TextDataSource(1) — DataSourceControl内幕 .NET组件编程(10) 补充 ISupportInitialize
Asp.net服务器控件编程(6) ViewState(二)——ViewState用法和IStateManager
mapserver · 2006-07-11 · via 博客园 - mapserver

        本系列的第三章我们了解了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页。