变量的访问范围
public partial class DataSetBinding : System.Web.UI.Page{
private string mystring ;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
mystring = "xc";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = mystring;
}
}
现在的问题是,在
protected void Button1_Click(object sender, EventArgs e)中,mysting是null,不仅仅是这个,即使外部变量定义一个dataset,在load事件中赋值什么,
在其他方法中,访问dataset就是null,如图在load事件中完全没有操作过一样 --------------------编程问答-------------------- 我看了viewstate是启用的 --------------------编程问答-------------------- 写成静态的。 。。 --------------------编程问答-------------------- public string mystring;试试看 --------------------编程问答-------------------- 或者 你把 mystring = "xc";
写在(!ispostback)外面 --------------------编程问答-------------------- 因为protected void Button1_Click(object sender, EventArgs e)
事件触发前,页面刷新回调了一次
又执行了一次 private string mystring ;
所以你取到的值始终是初始值NULL
去掉 if(!IsPostBack)
--------------------编程问答-------------------- 写成静态的。 。。可以 --------------------编程问答-------------------- 代码的执行顺序问题 --------------------编程问答-------------------- 或者 你把 mystring = "xc";
写在(!ispostback)外面
这个不可以把,这样的话,变量永恒是xc --------------------编程问答-------------------- 回调的时候就会执行这一句 --------------------编程问答-------------------- 我觉得是优化过度,sting还是会使用,但是被当作垃圾回收了 --------------------编程问答-------------------- 但是我总觉得,不会有这么严重的垃圾回收问题,问题出在哪里呢??
难道所有在不同方式之间使用的变量都要加static???
那么viewstate做什么用?? --------------------编程问答-------------------- private string mystring
{
get{return viewstate]["mystring "].ToString();}
set{viewstate]["mystring "]=value;}
} --------------------编程问答-------------------- 楼上极度正确!!!!!
顺便问个,dataset,如何储存呢?
static 线程还是viewstate呢?? --------------------编程问答-------------------- 你应当这样赋值
mystring = "xc";
而不是放在!IsPostBack里面
另外,页面的执行周期你应当搞清楚。每次刷新页面就是一个周期。由于Button.Click是IsPostBack的,所以,当你点击Button.Click时,页面不会执行!IsPostBack里面的代码的,因此也就不会保留值。
你应该去看看asp.net的基本原理
--------------------编程问答-------------------- viewstate也可以存dataset --------------------编程问答-------------------- static 是静态描述符 --------------------编程问答--------------------
改为静态的试试,你的那个变量在click中就是null这个没有疑问(从你目前的代码来看)。 --------------------编程问答-------------------- static是储存在内存中,全局变量,影响所有的访问用户!
viewstate储存在用户
线程储存在服务器
那么我应该用那种?? --------------------编程问答-------------------- 我想你是没有搞清楚那个IsPostBack的用法,当IsPostBack=false时表示第一次请求。在asp.net框架内部有很多的场景需要判断IsPostBack,所以当你点击button按钮的时候,IsPostBack=true,它不会再次执行里面的代码了。所以是空的
补充:.NET技术 , ASP.NET