簡體   English   中英

通過兩個按鈕更改數字?

[英]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 variableViewState @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM