很简单的一个问题.看看各位的思路类a里有个int类型变量temp=0  在程序的运行过程中它的值变为50在按钮事件中要访问temp.于是写了以下代码a obja = new a();
Response.Write(obja.temp.ToString());因为obja是实例化出来的所以访问obja.temp的时候temp的值为0请教很弱的一个问题.如何能访问到在a类里值为50的temp?   100分~

解决方案 »

  1.   

    楼主以前是做winform的吧,webform是不会保存状态的。所以你在page_load中设置为50了,在页面点击按钮postback回服务器的时候,temp会变成初始值。
    ----------------
    如果你想保存50,可以保存到viewstate、session中
      

  2.   

    a obja = new a();
    Response.Write(obja.temp.ToString());
    --------
    对了,你这个obja是新new的1个实例,所以值肯定是默认值0
      

  3.   

    temp不是在page_load中设置为50而是在类里面设置的现在要从page_load中读取类里的temp
      

  4.   

    如果没有代码修改obja.temp的值,那这个值就永远保持为0
      

  5.   

    @ antoniusguo(anton)
    如果没有代码修改obja.temp的值,那这个值就永远保持为0
    -------------------------------------------------------------
    类a里有个int类型变量temp=0 在程序的运行过程中它的值变为50
      

  6.   

    thinkinginboy() ( ) 信誉:100  2007-07-25 11:28:53  得分: 0  
     
     
       @ antoniusguo(anton)
    如果没有代码修改obja.temp的值,那这个值就永远保持为0
    -------------------------------------------------------------
    类a里有个int类型变量temp=0 在程序的运行过程中它的值变为50
      
    -----------------------------------------------------------------
    那等它变成50了再取不就行了???被楼主搞晕了!
      

  7.   

    a obja = new a();
    把你a的代码贴出来看看!!!
      

  8.   

    public class  a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            a obja = new a();    
            Response.Write(obja.temp );    }
    }
    結果輸入是 50,沒有問題。但在 b/s開發裡,不兗許出現在如下情況
    public class  a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        a obja;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (! IsPostBack)
            {
                obja = new a();
                Response.Write(obja.temp);
            }
        }
        
        //因為,這個事件觸發時,整個頁會重新刷新,
      //原來在 Load裡實
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(obja.temp);
        }
    }
      

  9.   

    public class  a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            a obja = new a();    
            Response.Write(obja.temp );    }
    }
    結果輸入是 50,沒有問題。但在 b/s開發裡,不兗許出現在如下情況
    public class  a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        a obja;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (! IsPostBack)
            {
                obja = new a();
                Response.Write(obja.temp);
            }
        }
        
        //因為,這個事件觸發時,整個頁會重新刷新,
      //原來在 Load裡實的對像已不存在
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(obja.temp);//所以,這裡將報錯,obja沒有實例化
        }
    }如果你想保存obja的狀態,所以這如下做。
    [System.Serializable]
    public class a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        a obja;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                obja = new a();            ViewState["obja_save"] = obja;            Response.Write(obja.temp);
            }    }    protected void Button1_Click(object sender, EventArgs e)
        {
            obja = (a)ViewState["obja_save"];
            Response.Write(obja.temp);
        }
      

  10.   

    比如这个类是这样的
    public class a
    {
        public a()
        {};
        public int temp = 0;
        public void function()
        {
            temp=50;
        }
    }
    在Page_Load的时候
    a obja = new a();
    访问obja.temp肯定是0了后来按2楼的意思把temp=50存储到Session中,代码:
    HttpContext.Current.Session.Add("temp",temp);在调试的时候temp的值为50,运行到上面这句代码提示空引用异常.
      

  11.   

    **************************************接上面那段..在a类里我已经通过其他方法调用了
    **************************************function();可以确定temp的值为50
      

  12.   

    还是我说的:所以你在page_load中设置为50了,在页面点击按钮postback回服务器的时候,temp会变成初始值。
    ----------------
    如果你想保存50,可以保存到viewstate、session中
      

  13.   

    @BearRui(开心熊 | BYD,我为你哭泣...)我的temp是在类里面的,用了你的方法保存到Session中HttpContext.Current.Session.Add("temp",temp);提示HttpContext.Current空引用异常.
      

  14.   

    Response.Write(obja.temp); 這句中的 temp哪裡來的?
    要保存一個對像成員也要 obja.temp嘛
      

  15.   

    當然這不是我的方法,我的方法是:
    [System.Serializable]
    public class a
    {
        public int temp = 50;
    }public partial class filetest : System.Web.UI.Page
    {
        a obja;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                obja = new a();
                Response.Write(obja.temp); //輸出50
                obja.temp = 100;
                ViewState["obja_save"] = obja; //保存整個對像
            }    }    protected void Button1_Click(object sender, EventArgs e)
        {
            obja = (a)ViewState["obja_save"];//把對像還原過來
            Response.Write(obja.temp);//輸出 100
        }//樓主注意基礎知道的學習
      

  16.   

    晕。Public Class Class1
        Public temp As Integer
        Sub New()
            temp = 50
        End Sub
    End Class访问时
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Response.Write(New Class1().temp)
        End Sub
      

  17.   

    楼上的obja = new a();
    Response.Write(obja.temp); //輸出50
    obja.temp = 100;
    ViewState["obja_save"] = obja; //保存整個對像
    -----------------------------------------------------------
    Response.Write(obja.temp); //輸出50----------这样是访问到了temp的初始值50
    你的obja.temp = 100;是在Page_Load中赋的值.这样做肯定可以访问到值为100
    而我的temp=100是在类里给它赋值的//现在是想通过Page_Load访问类里的100你的例子我明白.类里声明temp->Page_Load改变值->其他事件访问到改变的值我的是 类里声明temp->类里改变temp的值->其他事件访问到改变的值
      

  18.   

    WEB開發與 windows開發,在數據狀態保存上有很大的區別,這是由於 WEB存在一個回送的問題。
    每回送一次,整修個頁對像就要重新構造,
    所以,原來的數據對像全部還原,Load事件也將會重新再次執行,
    不同的是,IsPostBack 將會為 true.
    要保存頁面狀態有很多方法, cookie,session,request,viewstate等等
    樓主先去了解一下這知識吧
      

  19.   

    用属性吧,别用字段:
    class a
    {
        private StateBag viewstate;
        public a(StateBag viewstate) { this.viewstate = viewstate;}
        public int Temp
        {
            get{return (int)this.viewstate["a.temp"]}
            set{this.viewstate["a.temp"] = value;}
        }
    }
      

  20.   

    //类里声明temp->类里改变temp的值->其他事件访问到改变的值类里改变temp的值?什麼時候改?能在類裡改,為什麼不能在外面改?只要提供公共方法或者屬性就可以了。
      

  21.   

    汗了..我是在类里改变值..你们贴的代码都是在Page_Load改变变量的值这样做当然可以访问到...这我也清楚。....可能真的是我没表达清楚我的目的说白了就是要访问一个类里已经改变值的变量
      

  22.   

    用属性传值
    private int temp;
    public int Temp
    {
    get
    {
    return temp;
    }
    set
    {
    if(temp!=value)
    temp=value;
    }
    }
    //其他页面
    a obja = new a();
    Response.Write(obja.temp.ToString());
      

  23.   

    @回复人:wowangpeng()
    类里改变temp的值?什麼時候改?能在類裡改,為什麼不能在外面改?只要提供公共方法或者屬性就可以了。
    ---------------------------------------------------------------------------------
    页面触发事件->事件访问类->类中读取某个文件的大小给变量->页面触发第2个事件通过Page_Load访问这个类的变量,在客户端显示这个文件的大小...我不知道这样是不是说清楚了...
      

  24.   

    @ojekleen(三尾)你明白我的意思了但是
    ------------------------------------------
    //其他页面
    a obja = new a();
    Response.Write(obja.temp.ToString());这里读取到的obja.temp.ToString()是temp的初始值0..不是已经改变的50
      

  25.   

    web应用,无状态性。。变更值要保存。viewstate、session都可以。
      

  26.   

    [System.Serializable]
    public class a
    {
        public int temp = 50;
        public void setTemp()
        {
            temp = 330;//假設獲取的文件大小是330;
        }}public partial class filetest : System.Web.UI.Page
    {
        a obja;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                obja = new a();
                Response.Write(obja.temp); //輸出50
                obja.temp = 100;
                ViewState["obja_save"] = obja;
            }    }
        protected void Button1_Click(object sender, EventArgs e)
        {
            obja = (a)ViewState["obja_save"];
            obja.setTemp();
            ViewState["obja_save"] = obja;
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            obja = (a)ViewState["obja_save"];
            Response.Write(obja.temp);//輸出 330    }
      

  27.   

    當然,這種方法,要保存整修對像,對像做出修改後,又要保存,有點浪費資源。
    還有更好的辦法,就是,你的獲取文件大小方法直接返回這個文件大小 size,這個文件小在size page裡 用 veiwstate保存。
    如:
    public class a
    {
        
        public int getTemp()
        {
            return  330;//假設獲取的文件大小是330;
        }
    }public partial class filetest : System.Web.UI.Page
    {
        public int Size
        {
            get {
                if (ViewState["size"]!=null  && ViewState["size"].ToString() != string.Empty)
                {
                    return Convert.ToInt32(ViewState["size"]);
                }
                else {
                    return 0;
                }        }
            set {          
                ViewState["size"] = value;       
           }
        }    //第一個事件訪問類
        protected void Button1_Click(object sender, EventArgs e)
        {
            this.Size =(new a()).getTemp();
        }    //第二個獲取這個類結果並顯示    
        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Write(this.Size);
        }
      

  28.   

    感谢楼上各位的大力支持.现在可以存储到Session里面了.原先在类里写的HttpContext.Current.Session.Add("temp",temp);
    提示HttpContext.Current空引用异常
    后来我把外面的一个线程注释掉就可以正常存储了也没出现异常了.不知道是怎么回事把temp的值存储到Session以后下面一行代码:string str=Session["temp"].ToString();
    可以发现str的值确实为新的值50 !接下来通过xmlhttp访问临时页面getSessionInfo.aspx的Page_LoadPage_Load代码也很简单:
    判断Session不为空的时候
    Response.Write(Session["temp"].ToString());
    调试的时候发现编译器没有执行这句,而且Session["temp"].ToString()的值也是Null
    怀疑是Session无意中丢失了值.但是多次运行都是这样的结果.再次请教各位!
      

  29.   

    在同一個頁裡保存狀態推薦用viewstate,我給樓主這麼好的例子,不知道為什麼不去試一試,哎,,,,無語。最好不要用session,session不太穩定,容易丟失,還有,很費資源。
    我們開發裡,基本不用session,萬不得已,也就用 cookies,
      

  30.   

    如果你这个a变量不是会话相关,而是当前WebForm相关的,那么建议使用ViewState而不是Session。
      

  31.   

    好的.我再试一下wowangpeng()提供的办法
      

  32.   

    写的时候:this.ViewState["a"]=obja.temp读的时候: Response.Write(this.ViewState["a"].ToString());
      

  33.   

    谢谢wowangpeng,用ViewState已经可以在其他页面的Page_Load中访问到类里的值了不过要说的一个是,在自己创建的类里是不支持ViewState的,必须继承Page.一个问题解决了另外一个问题又来了.在Page_Load中通过ViewState已经可以访问到temp的值奇怪的是Response.Write(ViewState["temp"].ToString());xmlhttp没有任何反映代码贴出来给大家看
        <script language="javascript" type="text/javascript">
    // JScript 文件var xmlHttp;   
    function createXMLHttpRequest() {//如果是IE,用activexobject
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } //如果其它浏览器就用XMLHttpRequest
        else if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
    }  
    //开始函数
    function requestServer()
    {   
        window.setInterval('startRequest()',1000);
    }function startRequest() {
       
        createXMLHttpRequest();
        //创建一个新的http请求,并指定此请求的方法、URL以及验证信息
        xmlHttp.open("GET",'GetFileInfo.aspx', true);
        //指定当readyState属性改变时执行的函数
        xmlHttp.onreadystatechange = handleStateChange;
        //发送请求到http服务器并接收回应
        xmlHttp.send(null);
    }function handleStateChange() {
     //4数据接收完毕
        if(xmlHttp.readyState == 4) {
            //200返回请求状态为OK
            if(xmlHttp.status == 200) {
       //弹出对话框,并输入内容
       try{
        //alert(xmlHttp.responseText);
        document.getElementById("fileUploadState").innerHTML+=xmlHttp.responseText;
       }
       catch(e)
       {
        document.all['fileUploadState'].innerHTML=e;
       }
            }
        }
    }
        </script>----------------------------------------------------------------------------
    protected void Page_Load(object sender, EventArgs e)
    {
        if (ViewState["temp"] != null)
        {
            Response.Write(ViewState["temp"].ToString());
        }
        else
        {
            Response.Write("0");
        }
    }
      

  34.   

    ........这个是很简单的ajax xmlhttp啊
      

  35.   

    1。我給你提供了兩個例子,前一個例子是在Page裡保存整個對像,在你那個類裡基本就沒有用
      viewstate,後一個例子,是保存從對像的一個方法裡返回的值到viewstate裡。用不著在自己创建的类里是支持ViewState的。
    2。你這個問題與 viewstate沒有關系的呀,如果你不信,你直接在Page_Load事件裡來個
     Response.Write("abcd");試試,也沒有反應。這是你應用 ajax的問題,建議你采用ajaxpro。
      

  36.   

    1。我給你提供了兩個例子,前一個例子是在Page裡保存整個對像,在你那個類裡基本就沒有用 
      viewstate,後一個例子,是保存從對像的一個方法裡返回的值到viewstate裡。用不著在自己创建的类里是支持ViewState的。 
    2。你這個問題與   viewstate沒有關系的呀,如果你不信,你直接在Page_Load事件裡來個 
      Response.Write( "abcd ");試試,也沒有反應。這是你應用   ajax的問題,建議你采用ajaxpro。 
    ------------------------------------------------------------------------------------
    同意