C# 通过两个按钮改变的数字?

C# 通过两个按钮改变的数字?,c#,asp.net,button,label,C#,Asp.net,Button,Label,我想要一个标签,如果我点击按钮+增加1,点击按钮-减少1。这是我的密码: <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="+" /> <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="-" /> 但它们不起作用。问题出在哪里?我想这是因为您将n声明为page类的字段,如下所示: public

我想要一个标签,如果我点击按钮
+
增加1,点击按钮
-
减少1。这是我的密码:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="+" />
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="-" />

但它们不起作用。问题出在哪里?

我想这是因为您将n声明为page类的字段,如下所示:

public class DefaultPage:Page
{
    int n;
}
您需要了解,page类在每个请求中都会得到一个新实例,因此字段“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
postback时,您的类被重新初始化,
n
被初始化为
0
,然后在
Button1\u单击
事件中,您使用
n++
将它增加1,这样您就可以看到
1
。再次单击该按钮时,将再次创建类的新实例,
n
再次初始化为
0
。这就是它的工作原理,因此您无法看到预期的输出

我怎样才能解决这个问题

你将不得不选择任何一种。您可以在此处使用
隐藏变量
视图状态
@ChrisRun已经演示了如何使用
ViewState
执行此操作。以下是使用隐藏变量的方法:-

声明初始值为
0
的隐藏变量:-

<asp:HiddenField ID="NumHidden" runat="server" Value="0" />

使用字段而不是局部变量。我怀疑您在方法中声明了
n
。请用更多上下文显示您的代码是更多上下文和更多细节。“没用”真的没用,怎么没用?没用。你自己测试一下。@user1448393-我测试过了,它对我来说非常有效。你面临什么问题?
<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();
    }