事件处理程序中的属性值不正确

时间:2012-07-19 09:58:59

标签: c# asp.net variables properties viewstate

我试图在方法中设置一个值,如下所示,但是当我运行btnSaveValue时,没有值可以检索。我甚至尝试在默认类中创建一个私有的int val并将值赋给它但仍然有空值 - 任何人都可以帮助我吗?

感谢

 public partial class _Default : System.Web.UI.Page 
{
    valueAllocation valAlloc = new valueAllocation();

    public void declaringValue()
    {
        valAlloc.setValue(5);
        int testAlloc = valAlloc.getValue();
        lblResult.Text="Value set here is:"+testAlloc;  //THIS WORKS!!!
    }
    protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        lblResult.Text = "Value now is:" + valAlloc.getValue();   //DOESNT WORK??????!!!!!
    }
}

public class valueAllocation
{
    private int val;

    public void setValue(int value)
    {
        val = value;
    }
    public string getValue()
    {
        return val;
    }

}

5 个答案:

答案 0 :(得分:1)

这是因为您需要使用例如ViewState

保存每篇帖子中的值

这是与ASP.Net页面生命周期相关的基本问题。

基本上,每当您请求页面时,会在每个帖子上创建一个新的页面实例,并在响应返回到客户端时销毁

如果您希望保留回发后的状态,则需要手动保存ViewState

中的每个值

将整个类型存储在ViewState

我认为这是你最好的选择

自定义类型

[Serializable]
public class valueAllocation
{
    public int MyValue { get; set; }
}

背后的代码

protected valueAllocation MyObject
{
   get
   {
      if(this.ViewState["c"] != null) 
           return (valueAllocation)this.ViewState["c"];

      return null;
  }
  set
  {
      this.ViewState["c"] = value;
  }

public valueAllocation declaringValue()
{
    if (this.MyObject == null)
        this.MyObject = new valueAllocation { MyValue = 5 };

    lblResult.Text="Value set here is:"+ this.MyObject.MyValue.ToString();
    return this.MyObject;
}

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
{
    declaringValue()
    lblResult.Text = "Value now is:" + declaringValue().MyValue.ToString();
}

答案 1 :(得分:1)

问题是你从未调用过decalringValue(),执行此操作

 public valueAllocation declaringValue()
    {
        valAlloc.setValue(5);
        int testAlloc = valAlloc.getValue();
        lblResult.Text="Value set here is:"+testAlloc;  //THIS WORKS!!!
        return valAlloc;
    }

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        declaringValue()
        lblResult.Text = "Value now is:" + declaringValue().getValue();   //DOESNT WORK??????!!!!!
    }

答案 2 :(得分:1)

这是因为这是Web应用程序而不是桌面。您必须管理页面状态。因为在Web上,每个请求对服务器来说都是新的。

对于您的场景,您必须使用“viewstate”技术来维护页面的状态。

或者如果您希望该值不丢失,则必须使您的变量保持静态。

有关详细信息,请使用Google "State management in asp.net"

答案 3 :(得分:0)

看起来没有使用valAlloc.setValue(SomeNumber)设置值;在调用以下方法之前

或者我会说valAlloc.val的默认值为零

protected void btnSaveValue_Click(object sender, ImageClickEventArgs e)
    {
        lblResult.Text = "Value now is:" + valAlloc.getValue();   //DOESNT WORK??????!!!!!
    }

so you lblResult.Text is getting a zero from  valAlloc.getValue()

答案 4 :(得分:-1)

看起来您正在寻找定义的静态对象和静态链接。如果在这种情况下全局静态对象适合您,请投票我的回复。