就像我希望用户只发送一些信息..实际上已通过电子邮件发送了一个链接,打开一个带有文本框的页面..在该用户通过单击按钮发送一些信息..现在我不想要用户反复使用该链接发送信息... ..那我该怎么做呢?希望问题不会令人困惑
答案 0 :(得分:2)
小心,提前伪代码:
if (MyButton.Enabled) {
MyButton.Enabled = false;
SendInfo();
}
答案 1 :(得分:2)
对我而言,似乎他希望每个用户使用该表单发送一次信息。
如果我的解释是正确的,您可以通过每封电子邮件发送一个唯一的ID,并通过表单数据(以及用户的电子邮件)发送。
在服务器上,您将拥有一个数据库表,该表使用唯一ID映射每封电子邮件。每当用户填写表单时,您都会根据电子邮件检查ID,并在表格中设置一列,表明用户已经使用表单发送了数据。
接收数据时要做的第一件事是检查数据库并检查数据是否已经发送。如果没有,请接受数据,否则您可能会显示错误消息。
答案 2 :(得分:2)
根据您希望的严谨程度,您可以在第一次点击用户响应时向用户响应添加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;
}
}
答案 3 :(得分:1)
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;
}
}
答案 4 :(得分:1)
有很多方法可以做到这一点....例如:
int _counter = 0;
void btnCounter_click()
{
_counter++;
}
编辑:
在发送数据后禁用该按钮..
答案 5 :(得分:0)
根据您的描述 - 它显示为调查页面,您希望确保每个用户只能提交一次。这可以通过为每个用户创建唯一标识符然后在您的链接/表单中包含该值来实现。在服务器端,您必须忽略具有相同标识符的重复提交(或选择最后一个)。
答案 6 :(得分:0)
放入一个隐藏字段,并在用户第一次点击按钮时为其分配值。检查隐藏字段的值并进行比较。