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

大家帮忙看一下, 这个成员变量访问的时候, 怎么取值总是不变呢?

C# Code:

public partial class SupplierInfo : MacBase
{
    // 分页参数
    public int myNextID = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {            
            // 标准参数传递    
    // 测试一: 通过参数传递      
            myNextID = int.Parse(Request.QueryString["ID"]);
    
    // 测试二: 直接赋值
    myNextID = 100;
}
    }

    protected void BtnNext_Click(object sender, EventArgs e)
    {        
// 问题, 这里访问的时候, myNextID总是等于0, 为什么呢? 该如何修改
        Response.Write("BtnNext_Click..." + this.myNextID);
        Response.End();
    }
}

// 附加说明: 因为该页面, 会有多个用户同时访问, 所以没有使用public static int myNextID = 0; --------------------编程问答-------------------- 点击按扭时,发生的动作是PostBack.也就是不会执行if (!Page.IsPostBack) 里的语句。 --------------------编程问答-------------------- 这样只能是0;因为你每次单击按钮都现执行public int myNextID = 0; 
然后再执行按钮事件 --------------------编程问答-------------------- web 和 win 不同
每次请求页面的类会重新走构造函数的;

所以你的变量永远会被重新变回 0 --------------------编程问答--------------------
引用 2 楼 liubiaocai 的回复:
这样只能是0;因为你每次单击按钮都现执行public int myNextID = 0; 
然后再执行按钮事件


能不能提供解决的方法啊. --------------------编程问答--------------------
引用 3 楼 FlashElf 的回复:
web 和 win 不同 
每次请求页面的类会重新走构造函数的; 

所以你的变量永远会被重新变回 0


总会有解决的办法吧, 大家平时没有遇到过吗? --------------------编程问答-------------------- 放ViewState里面
public partial class SupplierInfo : MacBase 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!Page.IsPostBack) 
        {            
            this.ViewState["NextID"] = Request.QueryString["ID"]; 
        } 
    } 

    protected void BtnNext_Click(object sender, EventArgs e) 
    {        
        Response.Write("BtnNext_Click..." + this.ViewState["NextID"].ToString()); 
       Response.End(); 
    } 

--------------------编程问答--------------------  protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!Page.IsPostBack) 
        {                 
            myNextID = 0;
        } else {
           myNextID = int.Parse(Request.QueryString["ID"]); 
        }
    } 
--------------------编程问答--------------------
引用 6 楼 colorslife 的回复:
放ViewState里面 
public   partial   class   SupplierInfo   :   MacBase   
{   
        protected   void   Page_Load(object   sender,   EventArgs   e)   
        {   
                if   (!Page.IsPostBack)   
                {                         
                        this.ViewState[ "NextID "]   =   Request.QueryString[ "ID "];   
                }   
        }   

        pro…
--------------------编程问答-------------------- 把它定义为static就可以了 --------------------编程问答--------------------
引用 9 楼 ojlovecd 的回复:
把它定义为static就可以了


不能用static啊, 否则多用户访问的时候, 变量就会因为共享而混乱。 --------------------编程问答-------------------- 写个赋值的方法

    

    public int myNextID = 0; 
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
           Setvalue();
        }
    }

    private void Setvalue()
    {
        if (string.IsNullOrEmpty(Request.QueryString["ID"]))
        {
            myNextID = 100;
        }
        else
        {
            myNextID = Convert.ToInt32(Request.QueryString["ID"]);
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Setvalue();
        Response.Write("Button1_Click..." + this.myNextID);
        Response.End(); 
        
    }
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,