我在vs自动生成的后台文件webform1.aspx.cs中定义一个成员变量: string id ;
在page_load()里写了:
if (! Page.IsPostBack)
{
id = Request.Params["id"];
}
在一个button的click事件里写:
Label1.Text = this.id ;
结果在page_load()里可以正常获取id,而在button的click里获取为空。
难到aspx.cs里的类在每个http请求都实例化一次,用完就释放了。
如何才能将成员变量保持住。
是的,第一次page_load处理之后,页面输出到客户端,然后就彻底释放了环境变量。正因为此,web不能特别为了某一个用户保持特别高速度的响应,但是却能够对大量客户提供很高的综合效率。
保持页面状态,使用ViewState。
http://www.cnblogs.com/Hedonister/archive/2005/08/14/214669.html
如果你在Click事件中这样取:
id = Request.Params["id"]; //这句一定要,从URL中取
Label1.Text = this.id ;
它就会有,实际上真正原因是id动态变量丢失了,应该重新从URL获取.
为什么会丢失呢,在执行Click之前,会先走初始化页面,初始化页面时,页面中的动态
变量会再次重新生成,id动态变量的值也就没有了.
或者将 id 改为 static, private staitc string id = "";
则:
Label1.Text = this.id ; //只有一句就可以取到了
明白?
随时都能取到值:
Label1.Text = Request.Params["id"];