当前位置:编程学习 > C#/ASP.NET >>

变量的访问范围

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 是静态描述符 --------------------编程问答--------------------
引用楼主 cstt60777 的回复:
public partial class DataSetBinding : System.Web.UI.Page
{
   
    private string mystring ;
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {

……

改为静态的试试,你的那个变量在click中就是null这个没有疑问(从你目前的代码来看)。 --------------------编程问答-------------------- static是储存在内存中,全局变量,影响所有的访问用户!

viewstate储存在用户

线程储存在服务器

那么我应该用那种?? --------------------编程问答-------------------- 我想你是没有搞清楚那个IsPostBack的用法,当IsPostBack=false时表示第一次请求。在asp.net框架内部有很多的场景需要判断IsPostBack,所以当你点击button按钮的时候,IsPostBack=true,它不会再次执行里面的代码了。所以是空的
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,