我有一个简单的注册表,名称和地址。当用户填写并提交表单时,数据将被插入数据库。
显示成功警报消息。
如果现在用户单击刷新按钮,则会显示成功警告框,并在DB中复制相同的行。
如何避免这种情况。
如果存在于db中,我不想使用。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
要真正避免重复,您需要在插入之前检查数据库中是否已存在数据。如果您只是想在页面刷新时避免这种行为,可以在插入后将用户重定向到另一个页面:
Response.Redirect("other_page.aspx");
答案 1 :(得分:0)
通常,当您刷新页面时,之前的点击事件将会触发,这会导致重新插入数据库。要避免这种情况,请检查页面是否刷新/不在按钮单击事件上。
public partial class Class1 : System.Web.UI.Page
{
#region Code to Check Refresh postback
#region Private Variable
private int SessionValue
{
get
{
int value = default(int);
if (int.TryParse(Convert.ToString(this.Session["__REFRESH"]), out value))
return value;
return 0;
}
set
{
this.Session["__REFRESH"] = value;
}
}
private int ViewStateValue
{
get
{
int value = default(int);
if (int.TryParse(Convert.ToString(this.ViewState["__REFRESH"]), out value))
return value;
return 0;
}
set
{
this.ViewState["__REFRESH"] = value;
}
}
#endregion
#region Public Property
public bool IsPageRefreshed
{
get
{
return this.SessionValue != this.ViewStateValue;
}
}
#endregion
protected override object SaveViewState()
{
//Increment both the session and view state value at the same time.
this.SessionValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
this.ViewStateValue = this.SessionValue == int.MaxValue ? 0 : this.SessionValue + 1;
return base.SaveViewState();
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
if (IsPageRefreshed)
{
// Here do your work. i.e save into DB.
}
}
}
试试这个。希望这是你所期望的。
答案 2 :(得分:0)
在实际情况下,您将有两个选项来处理手动刷新方案,如您所解释的那样。
显示“并显示成功警报消息”。您可以使用“您的数据已成功保存。您是否要清除下一条记录的表单?选项为是和否。当用户单击是时,您应该将表单重置为原始数据输入状态(到用户之前的状态)开始填写表格。这将阻止刷新方案。您也可以默认重置表单而不显示是或否消息。
其次是将用户重定向到其他页面的同一页面,在该页面中列出您为其输入记录的实体的记录。例如,从添加员工页面重定向到员工列表页面。
希望您能够实施其中任何一项。