2

我试图在如下所示的方法中设置一个值,但是当我运行 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;
    }

}
4

5 回答 5

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();
}
于 2012-07-19T10:05:02.420 回答
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??????!!!!!
    }
于 2012-07-19T10:05:12.310 回答
1

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

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

或者,如果您希望该值不丢失,则必须将变量设为静态。

谷歌搜索更多细节"State management in asp.net"

于 2012-07-19T10:05:56.713 回答
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()
于 2012-07-19T10:08:02.320 回答
-1

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

于 2012-07-19T10:05:15.630 回答