[英]A number changing by two buttons?
我想,通過增加1,如果我點擊按鈕的標簽+
和減少通過點擊按鈕-
這是我的代碼:
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="+" />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="-" />
和
public partial class WebForm1 : System.Web.UI.Page
{
int n = 0;
...
n--;
Label1.Text = n.ToString();
and
n++;
Label1.Text = n.ToString();
但是它們不起作用。 問題是什么 ?
我猜這是因為您已將n聲明為頁面類的字段,如下所示:
public class DefaultPage:Page
{
int n;
}
您需要了解頁面類在每個請求中都會獲得一個新實例。因此,字段“ n”不能保留該值,因為它們是不同實例所擁有的。
您可以嘗試從頁面的Label1控件中獲取舊值:
int n=int.Parse(Label1.Text);
n--;
Label1.Text = n.ToString();
如果要使用此代碼,請注意確保Label1的Text屬性是數字。
您可以將其保存在ViewState變量中。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (ViewState["Clicks"] == null)
{
ViewState["Clicks"] = 0;
}
Label1.Text = ViewState["Clicks"].ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
int ClicksCount = (int)ViewState["Clicks"] + 1;
Label1.Text = ClicksCount.ToString();
ViewState["Clicks"] = ClicksCount;
}
protected void Button2_Click(object sender, EventArgs e)
{
int ClicksCount = (int)ViewState["Clicks"] - 1;
Label1.Text = ClicksCount.ToString();
ViewState["Clicks"] = ClicksCount;
}
為什么它不起作用。 問題是什么 ?
在您的WebForm1
類中, n
是一個實例變量,在創建您的類的實例時,它將被重新初始化。 當頁面加載時,它被初始化為0
,現在當您單擊Button1
回發時,您的類被重新初始化並且n
被初始化為0
,然后在Button1_Click
事件中,使用n++
其遞增1,因此您可以看到1
。 當您再次單擊該按鈕時,將再次創建一個新的class實例,並且將n
再次初始化為0
。 這是它的工作方式,因此您看不到預期的輸出。
我怎樣才能解決這個問題?
您將必須選擇任何一種“ 狀態管理技術” 。 您可以在此處使用Hidden variable
或ViewState
。 @ChrisRun已經演示了如何使用ViewState
做到這一點。 這是使用隱藏變量的方法:
聲明一個初始值為0
的隱藏變量:-
<asp:HiddenField ID="NumHidden" runat="server" Value="0" />
背后的代碼:
public partial class WebForm1 : System.Web.UI.Page
{
int n = 0;
protected void Page_Load(object sender, EventArgs e)
{
n = int.Parse(NumHidden.Value);
}
protected void Button1_Click(object sender, EventArgs e)
{
n++;
Label1.Text = NumHidden.Value = n.ToString();
}
protected void Button2_Click(object sender, EventArgs e)
{
n--;
Label1.Text = NumHidden.Value = n.ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.