问一个viewstate的问题
自定义控件中的一个属性
用 public string ResourceName
{
get { return _resourceName;}
set { _resourceName = value;}
}
这个不就可以了吗?为什么还用下面这种写法?
public virtual String ResourceName
{
get
{
Object state = ViewState[ "ResourceName "];
if (state != null)
{
return (String)state;
}
return " ";
}
set
{
ViewState[ "ResourceName "] = value;
}
}
这个还要类型转化,浪费性能,可是我看好多开源项目多用这个,不明白,望知道的回答一下,谢谢
------解决方案--------------------ViewState是跨页面实例的。
如果这个你不明白,那么你应该从页面实例对象的基本生命周期学起。我觉得这是学asp.net最基本的理论知识。可能你都是从那些“写个hello wold,用个TextBox、Button控件”的快速入门书学asp.net的。那些书不是任何理论书,不是专业书籍。
页面处理“一瞬间”就完成了,然后页面就消失了。当客户端再请求这个页面处理的时候,服务器端实例化了同一页面的新实例,而不是原来那个,因此_resourceName中并没有原来写入的数据。
------解决方案--------------------二楼解释的很清楚了,页面是相对于客户端来说的,对于服务器来说就一个类,ViewState的值是保存在客户端,每次postback时都传回给服务器,服务器处理好数所后的ViewState值传客户端,但是在这个过程是,页面这个对象被服务器重新初始化了,重新初始化的类只有他本身的定义,怎么会有你赋的值呢?
public virtual String ResourceName
{
get
{
Object state = ViewState[ "ResourceName "];
if (state != null)
{
return (String)state;
}
return " ";
}
set
{
ViewState[ "ResourceName "] = value;
}
}
是个好方法,你是感觉不到他的速度的