asp.net按钮点击事件只发生一次
本文关键字:一次 按钮 net 事件 asp | 更新日期: 2023-09-27 18:25:07
我对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>
每次请求都会重新创建Webform类,这就是它的工作方式。你需要以其他方式坚持现场pom。您可以将它添加到会话状态中,但这会影响应用程序的可伸缩性,因为您可以在服务器上保持状态。
它已经被标签控件持久化了,所以你可以在点击事件中做这样的事情:
var pom = Int.Parse(Label1.Text);
pom++;
Label1.Text = pom.ToString();
然而,对于你想要坚持的事情,情况并非总是如此。在这种情况下,我会在保存它的html中添加一个隐藏字段。我的WebForms有点生疏,但在您的标记中:
<asp:HiddenField id="pom" value="0" />
然后像上面所做的那样,在click事件中拉出值并递增。
每当您单击int pom = 0
时,都会将其初始化为零,然后设置值,这就是它看起来只调用一次的原因。要么使其静止,要么更好地尝试:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "" + (Convert.ToInt32(Label1.Text) + 1);
}
您可以尝试将初始化移到IsPostBack检查中,这样重新加载页面就不会将变量重新初始化为0。IsPostBack值指示页面是首次呈现还是响应回发而加载,并且按钮单击事件触发回发。
其他
IsPostBack在页面生命周期的特定阶段触发
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
int pom = 0;
}
Label1.Text = Convert.ToString(pom);
}
在某种程度上,这取决于pom
变量的用途。如果它跟踪每个用户的点击量,那么上面的内容应该会有所帮助。但是,如果您正在跟踪所有用户的点击,那么您应该考虑其他事情(可能使用global.asax)
它现在正在工作!这是向上和向下的代码。
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);
}
}
}