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();
}