变量的值不保留在类的方法中

时间:2009-04-30 04:53:19

标签: c# asp.net

在使用C#的ASP> Net中,我将变量声明为类的成员,如下所示:

public class sales: System.Web.UI.Page
{
string type=null;
}

我的UI中有一个图像按钮,我已经定义了名为

的事件
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)

在这个方法中,不保留赋给变量'type'的任何值(通过类的任何其他方法),并且只检索值null,尽管我已经在类中的某处给了'type'一些值。 ..

我无法访问指定值的问题可能是什么????

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

这可能是渲染管道的结果。请记住,即使您的事件被触发,页面和所有变量也会使用其默认值重新创建。将其创建为至少具有支持视图状态存储的属性。

public String Type 
{
    get { return ViewState["Type"].ToString(); } 
    set { ViewState["Type"] = value; } 
}

答案 2 :(得分:0)

每次对页面发出请求时,如果是回发,则重新初始化变量。

尝试将变量放在属性而不是字段中(正如您所做的那样)并在第一次加载页面时初始化属性,只有在不是回发的情况下。

您应该执行以下操作:

  //on the On_Load page's event
  if (!IsPostback)
    Type = null;    

  private string Type { get; set; }

答案 3 :(得分:0)

如果您在对象中分配值然后使用按钮进行回发,则除非您在会话,视图状态或其他内容中存储该对象的实例,否则该值将消失。

string sType = "something";
Session["YourSessionTagHere"] = sType;

一旦发生回发,您就可以取出该对象并从您的onclick事件中访问该值。

string sType = (string)(Session["YourSessionTagHere"]);

听起来你没有访问同一个对象而你的对象会丢失,因为每次回发后你的字符串都是新的。

您还可以通过在get和set中设置一个为您执行会话内容的属性来使其更清晰。