asp.net按钮单击事件只发生一次

时间:2014-10-01 07:53:30

标签: c# asp.net

我是ASP.NET的新手,但我有C和C#的背景知识。我正在尝试创建将与我的数据库连接的Web应用程序。我做到了,那没关系。当我添加按钮在数据库中向前和向后移动时出现问题...它工作正常但只有一次点击!然后我想我可能在代码中有错误,我决定以简单的方式做到这一点。

我创建了一个只有一个按钮和一个标签的新Web表单,但行为仍然相同 - 在第一次单击事件未再次触发后。有什么帮助吗?

我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DummyTest
{
    public partial class WebForm1 : System.Web.UI.Page
    {
    int pom = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = Convert.ToString(pom);
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        pom++;
        Label1.Text = Convert.ToString(pom);
    }
    }
  }

和来源

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs"
 Inherits="DummyTest.WebForm1" %>

 <!DOCTYPE html>

 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title></title>
 </head>
 <body>
 <form id="form1" runat="server">
 <div>

    Dummy Test
    <br />
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <br />

</div>
</form>
</body>

4 个答案:

答案 0 :(得分:2)

您的Webform类会在每次请求时重新创建 - 这就是它的工作原理。你需要以其他方式坚持现场pom。您可以将其添加到会话状态,但这会影响应用程序的可伸缩性,然后在服务器上保持状态。

标签控件已经保留了它,因此您可以在点击事件中执行以下操作:

var pom = Int.Parse(Label1.Text);
pom++;
Label1.Text = pom.ToString();

但是,对于您想要保留的内容,情况并非总是如此。在这些情况下,我会在html中添加一个隐藏字段来保存它。我的WebForms有点生疏,但在你的标记中:

<asp:HiddenField id="pom" value="0" />

然后将值拉出并在点击事件中增加,如上所述。

答案 1 :(得分:1)

每当你点击你的int pom = 0初始化为零,然后你设置值,这就是它看起来调用一次的原因。尝试静态或更好地尝试:

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = "" + (Convert.ToInt32(Label1.Text) + 1);
}

答案 2 :(得分:0)

您可以尝试将初始化移动到IsPostBack检查,因此重新加载页面不会将变量重新初始化为0. IsPostBack值指示页面是第一次呈现还是正在加载响应回发和按钮单击事件触发回发。

其他
IsPostBack在page lifecycle

的特定阶段触发
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
         int pom = 0;
    }
    Label1.Text = Convert.ToString(pom);
}

在某种程度上,它取决于pom变量的用途。如果它是跟踪每个用户的点击次数,那么以但是,如果您要跟踪所有用户的点击次数,那么您应该考虑其他事项(可能使用global.asax)

答案 3 :(得分:0)

现在正在运作!这是Up和Down的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DummyTest
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        static int pom;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
               pom = 0;
               Label1.Text = Convert.ToString(pom);
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
           var pom = Int32.Parse(Label1.Text);
           pom++;
           Label1.Text = Convert.ToString(pom);
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
           var pom = Int32.Parse(Label1.Text);
           pom--;
           Label1.Text = Convert.ToString(pom);
        }
    }
}