[英]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.