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

C# 事件处理程序中的属性值不正确,c#,asp.net,variables,properties,viewstate,C#,Asp.net,Variables,Properties,Viewstate,我试图在如下所示的方法中设置一个值,但当我运行btnSaveValue时,没有要检索的值。我甚至试着在defaul类中创建一个私有int-val并给它赋值,但是仍然有一个空值出现——有人能帮我吗 谢谢 public partial class _Default : System.Web.UI.Page { valueAllocation valAlloc = new valueAllocation(); public void declaringValue() {

我试图在如下所示的方法中设置一个值,但当我运行btnSaveValue时,没有要检索的值。我甚至试着在defaul类中创建一个私有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;
    }

}

这是因为您需要在每篇文章中保存值,例如使用
ViewState

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

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

如果要在回发过程中保持状态,则需要在
ViewState

在ViewState中存储整个类型 我想这是你最好的选择

自定义类型 代码隐藏
问题是您从未调用过贴花值(),请执行此操作


看起来您正在查找定义的静态对象和静态链接。如果在这种情况下全局静态对象对您有效,请投票支持我的答复。

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

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

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


有关更多详细信息,谷歌搜索了“asp.net中的状态管理”

似乎没有使用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()

当你说“不工作”时,你的意思是“返回0”吗?对不起,我在另一个方法中调用了它。你能发布该部分吗?该方法何时调用?发布的代码太多,基本上它会查询一个DB,如果一切正常,则会将一个值传递给declaringValue,在declaringValue上设置该值。然后我想在用户单击按钮时使用该值。在此阶段,该值为空。它似乎与ViewState的思路一致,但我在实现它时遇到了问题:(该方法是在pageload上调用的,还是在单击按钮时在页面生命周期的某个地方调用的?在标准页面生命周期中,当我单击按钮时调用的?是的,看起来这是正确的区域,只是在实现它时遇到了问题,我尝试从字面上取消您在这里给我的内容,并尝试使用它来克服编译错误。)rs(受保护的虚拟状态包ViewState{get;}),但它仍然无法编译。它抛出错误的原因是什么?这种方法是在ViewState中存储视图状态的典型示例。。。(有关更多示例,请深入MSDN上的ViewState文档……我怀疑您的代码试图将ViewState设置为某个值,而不是在其中设置值……)好吧,我的错,这就是我通常实现属性的方式(当我开发服务器控件时,我认为基本想法已经足够了),this.ViewState用于ASPX代码隐藏中。检查我的更新回答如何将该值设置为静态?这样在回收appdomain后进行回发时会出现令人讨厌的未定义行为…是的,所有状态和静态变量也会与appdomain RecycledView一起回收tate在AppDomains被推送到客户端后仍然存在。这可能有用,也可能是灾难性的,这取决于您的体系结构。。。
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();
}
 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??????!!!!!
    }
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()