【问题标题】:preventing page load re-insertion of data in db防止页面加载重新插入数据库中的数据
【发布时间】:2013-05-17 10:34:13
【问题描述】:

我有一个简单的注册表,上面有姓名和地址。当用户填写并提交表单时,数据将插入 DB。

并显示成功警报消息。

如果现在用户单击刷新按钮,则会显示成功警报框,并且同一行在 DB 中重复。

如何避免这种情况。

如果数据库中存在,我不想使用。

非常感谢任何帮助。

谢谢

【问题讨论】:

标签: asp.net c#-4.0


【解决方案1】:

通常当您刷新页面时,会触发之前的点击事件,这会导致重新插入您的数据库。为避免此检查页面是否刷新/不在按钮单击事件上。

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】:

    要真正避免重复,您需要在插入之前检查数据是否已存在于数据库中。如果您只想在页面刷新时避免这种行为,您可以在插入后将用户重定向到另一个页面:

    Response.Redirect("other_page.aspx");
    

    【讨论】:

      【解决方案3】:

      如您所解释的,在真实世界场景中,您将有两个选项来处理手动刷新场景。

      1. 在显示“并显示成功警报消息”时。您可以使用“您的数据已成功保存。您要清除表单以进行下一条记录吗?选项为是和否。当用户单击“是”时,您应该将表单重置为原始数据输入状态(用户之前的状态开始填写表格)。这将阻止刷新情况。您也可以默认重置表格而不显示是或否消息。

      2. 第二个是将用户重定向到其他页面的同一页面,在该页面中您列出了您为其输入记录的实体的记录。例如,从添加员工页面重定向到员工列表页面。

      希望你能实现其中的任何一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 2013-08-09
        • 2017-05-15
        • 2012-12-20
        相关资源
        最近更新 更多