[英]How to know how many times a button has been clicked?
就像我希望用户仅发送一次信息..实际上已经通过电子邮件发送了一个链接,该链接打开了一个带有文本框的页面..在那个用户中,通过单击按钮发送了一些信息..现在我不希望用户使用该链接一遍又一遍地发送信息..so,我该怎么办呢? 希望问题不会引起混淆
当心,伪代码在前:
if (MyButton.Enabled) {
MyButton.Enabled = false;
SendInfo();
}
在我看来,他似乎希望每个用户使用该表格发送一次信息。
如果我的解释正确,那么您可以通过每封电子邮件发送唯一的ID,并随表格数据一起发送(连同用户的电子邮件)。
在服务器上,您将具有一个数据库表,该表映射具有唯一ID的每封电子邮件。 每当用户填写表单时,您都将对照电子邮件检查ID,并在表中设置一列,表明该用户已经使用该表单发送了数据。
接收数据时,您要做的第一件事是检查数据库并检查数据是否已发送。 如果不是,请接受数据,否则您可能会显示错误消息或其他内容。
根据您希望的严格程度,您可以在用户第一次单击Cookie时向用户响应添加cookie,这表示他们已经单击过,然后在后续请求中存在该cookie时忽略任何进一步的点击。 如果他们有这个cookie,那么您也可以在查看页面时禁用该控件。 否则,如果他们是登录用户,则可以将点击记录存储在数据库中,并通过检查数据库中该用户单击此控件的记录来拒绝后续点击。
这是一些要演示的代码:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
var ctrl = sender as WebControl;
if (!HasButtonBeenClicked(ctrl.ClientID))
{
Response.Write("Click accepted");
}
else
{
Response.Write("You have clicked this already!");
}
}
private bool HasButtonBeenClicked(string controlId)
{
if (Request.Cookies["has_clicked_"+ controlId] != null)
{
return true;
}
var cookie = new HttpCookie("has_clicked_" + controlId);
Response.Cookies.Add(cookie);
return false;
}
}
bool isButtonClicked = false; // this will be held in global
在按钮单击事件中设置isButtonClick = true;
button1_Click()
{
if(!isButtonClicked)
{
// which means button is clicked once, put your action code here
isButtonClicked = true;
}
}
有很多方法可以做到这一点。例如:
int _counter = 0;
void btnCounter_click()
{
_counter++;
}
编辑:
发送数据后,只需禁用该按钮即可。
在您的描述中-看起来像调查页面,您希望确保每个用户仅提交一次。 这可以通过为每个用户创建一个唯一的标识符,然后将该值包括在链接/表单中来实现。 在服务器端,您必须忽略具有相同标识符的重复提交(或选择最后一个)。
当用户第一次单击按钮时,放置一个隐藏字段并为其分配值,因此请检查隐藏字段的值并进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.