如何避免asp.net回发重复的条目?(How to avoid duplicate entry f

2019-09-19 13:53发布

我有一个从模板表中提取数据的下拉列表。 我有一个添加按钮,插入新的模板。 添加按钮,便会带来了jQuery的弹出插入新值。 将会有一个保存按钮保存新的数据。 On_Save_Click我输入新数据并关闭弹出窗口。

这里是proplem:当我刷新页面,该页面再次输入值。 所以,我得到重复的条目!

问:我怎样才能避免这个问题? 我检查了Satckoverflow和谷歌,他们都建议重定向到另一页。 我不希望将用户重定向到另一个页面。 我如何使用相同的形式来避免这个问题? 请帮忙。

Answer 1:

您可以使用视图状态或会话以指示数据已经插入(按下按钮)。

事情是这样的:

private void OnbuttonAdd_click()
{
   if(ViewState["DataInserted"] != "1")
   {
      ...
      // Add new entry...
      ...
      if(data inserted successfully)
      {
         ViewState["DataInserted"] = "1";
      }
   }
}

编辑:

public bool DataInserted
{
    get
    {
        if (HttpContext.Current.Session["DataInserted"] == null)
        {
            HttpContext.Current.Session["DataInserted"] = false;
        }
        bool? dataInserted = HttpContext.Current.Session["DataInserted"] as bool?;

        return dataInserted.Value;
    }
    set
    {
        HttpContext.Current.Session["DataInserted"] = value;
    }
}

...

private void OnbuttonAdd_click()
{
   if(!DataInserted)
   {
      ...
      // Add new entry...
      ...
      if(data inserted successfully)
      {
         DataInserted = true;
      }
   }
}


Answer 2:

最简单的方法是使用后/重定向/获取模式 。

基本上,页面生成刷新行动后需要重新发布该数据。 使用这种模式,你将重新加载整个页面。

与ASP.Net,你有一个简单的替代方法,使用UpdatePanel 。 这将刷新使用AJAX页面的一部分。 由于网页本身仍然是一个GET请求的结果,你可以刷新页面。 而当你使用ASP.Net,它很容易集成。

最后,您可以使用由AJAX刷新了家。 jQuery的,淘汰赛的组合和休息服务(例如),可以帮助您避免在一个Ajax调用的好处刷新整个页面。



Answer 3:

有一些经验:

  1. 禁用(由JavaScript在客户端)提交关于点击按钮。
  2. 改变会话[“issaved”] =上在服务器端保存操作,并改变它在新的动作,假假真真。
  3. 使用视图状态等的recordId(而不是查询字符串)参数传递给清除刷新页面上。 我总是与会话传递参数的新的页面,然后在页面负载设定的ViewState [“AAA”] =会话[“AAA”]和清晰会话。

...我希望是有用的?



Answer 4:

做到这一点是非常容易和有效

在页面加载()给出的IsPostBack这一翻译,请提供按钮点击内(发送或插入数据)

正在重置所有输入值后,再次拨打同一页

 protected void Btn_Reg_Click1(object sender, EventArgs e)
    {
        try
        {
            if (IsPostBack)
            {
                Registration_Save();
                Send_Mail();
                txtEmail.Text = "";
                txtname.Text = "";
                Response.Redirect("~/index.aspx");
            }


        }
        catch (Exception) { }

    }

你不会看到刷新页面之后的任何服务器的消息..



文章来源: How to avoid duplicate entry from asp.net on Postback?