我试图在方法中设置一个值,如下所示,但是当我运行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;
}
}
答案 0 :(得分:1)
这是因为您需要使用例如ViewState
。
这是与ASP.Net页面生命周期相关的基本问题。
基本上,每当您请求页面时,会在每个帖子上创建一个新的页面实例,并在响应返回到客户端时销毁
如果您希望保留回发后的状态,则需要手动保存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)
看起来您正在寻找定义的静态对象和静态链接。如果在这种情况下全局静态对象适合您,请投票我的回复。