2

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

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

问题: 我怎样才能避免这个问题?我查看了 Satckoverflow 和 Google,他们都建议重定向到另一个页面。我不想将用户重定向到另一个页面。我怎样才能使用相同的表格来避免这个问题?请帮忙。

4

4 回答 4

4

您可以使用 viewstate 或 session 来指示数据是否已插入(按下按钮)。

像这样的东西:

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;
      }
   }
}
于 2012-07-16T20:04:17.103 回答
3

最简单的方法是使用post/redirect/get 模式

基本上,使用 post 构建页面的刷新操作需要重新发布数据。使用此模式,您将重新加载整个页面。

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

最后,您可以使用自制的 AJAX 刷新。jQuery、KnockOut 和 rest 服务的组合(例如)可以帮助您避免刷新整个页面,从而受益于 ajax 调用。

于 2012-07-16T20:09:12.730 回答
1

这样做非常简单有效

不要在页面load()中给出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) { }

    }

刷新页面后您将看不到任何服务器消息..

于 2013-12-12T13:13:53.937 回答
1

有一些经验:

  1. 单击时禁用提交按钮(通过 JavaScript 在客户端)。
  2. 在服务器端保存操作时更改 Session['issaved'] = true 并将新操作更改为 false。
  3. 使用视图状态传递参数,如 RecordId(而不是 QueryString)以在刷新页面上清除。我总是将带有 Session 的参数传递给新页面,然后在页面加载时设置 ViewState['aaa']=Session['aaa'] 并清除 Sessions。

...我希望有用...

于 2014-03-02T09:05:35.523 回答