我有3个在单击按钮时应该增加的整数,然后它们的值转换为字符串并在相应的标签上更新,但它们永远不会超过1。
public partial class MainPage : System.Web.UI.Page
{
Random rd = new Random();
int oneint = 0;
int twoint = 0;
int threeint = 0;
protected void Button1_Click(object sender, EventArgs e)
{
int rn = rd.Next(1, 1000);
if (rn > 1 && rn < 50)
{
Label1.Text = "3";
threeint++;
threelbl.Text = threeint.ToString();
}
if (rn > 50 && rn < 500)
{
Label1.Text = "2";
twoint++;
twolbl.Text = twoint.ToString();
}
if (rn > 500 && rn < 1000)
{
Label1.Text = "1";
oneint++;
onelbl.Text = oneint.ToString();
}
}
这适用于ASP.NET webforms网页。有没有人知道我哪里出错?
答案 0 :(得分:2)
按原样,每次加载页面时,您都将变量初始化为零。因此,在第一次增量之后,它将回到零,解释为什么它从不增加到1以上。请参阅ScottHannen的答案,因为它更适合解释如何解决这个问题。
答案 1 :(得分:2)
即使您将变量初始化为全局变量,它们仍将重置为零,除非它们以某种方式持久化。
有几种方法可以做到这一点。
<asp:hidden runat="server">
元素并将值存储在这些元素中。这可能是最简单的。PreRender
事件期间将值存储在ViewState中,并在Load
事件中再次检索它们。在两种情况下都能确保将值输出到页面,这意味着它们将通过任何回发事件发送回服务器。为简单起见,我只使用隐藏的表单元素。但是,如果有任何类型的复杂数据,那么我
Load
事件将其保存在PreRender
事件中。
public partial class MainPage : System.Web.UI.Page
{
Random rd = new Random();
private PageState _pageState;
protected void Page_Load(object source, EventArgs e)
{
_pageState = ViewState["pageState"] as PageState ?? new PageState();
}
protected void Page_PreRender(object sender, EventArgs e)
{
ViewState["pageState"] = _pageState;
}
protected void Button1_Click(object sender, EventArgs e)
{
int rn = rd.Next(1, 1000);
if (rn > 1 && rn < 50)
{
Label1.Text = "3";
_pageState.threeint++;
threelbl.Text = _pageState.threeint.ToString();
}
if (rn > 50 && rn < 500)
{
Label1.Text = "2";
_pageState.twoint++;
twolbl.Text = _pageState.twoint.ToString();
}
if (rn > 500 && rn < 1000)
{
Label1.Text = "1";
_pageState.oneint++;
onelbl.Text = _pageState.oneint.ToString();
}
}
}
[Serializable]
public class PageState
{
public int oneint { get; set; }
public int twoint { get; set; }
public int threeint { get; set; }
}
答案 2 :(得分:1)
你应该保留回发后所有三个int字段的值,你可以通过查看状态或会话或隐藏字段保留你将在回发中获得,或者也可以在查询字符串中。