【问题标题】:What is the best way to distinguish beteen "Refresh Post" or a "Real Post Back"区分“刷新帖子”或“真实回帖”的最佳方法是什么
【发布时间】:2011-06-24 17:45:39
【问题描述】:

区分“刷新帖子”或“真实回帖”的最佳方法是什么。

这是我需要达到的目标

protected void Button1_Click(object sender, EventArgs e)
{

if(PostBack && !Refresh)
{
//Do Something
}

}

【问题讨论】:

  • 您是在询问如何限制双重提交的情况,即用户在提交内容后多次点击刷新,以减少双重或多重保存记录的发生?
  • 正是......因为即使在刷新期间也会触发创建原始回发的事件。

标签: c# .net asp.net postback refresh


【解决方案1】:

我通常在回发事件中执行 Response.Redirect 到同一页面。 这样我所有的Page.IsPostBack 都是真正的回发而不是刷新

【讨论】:

    【解决方案2】:

    您可以设置一个隐藏输入,每次加载表单时随机生成一个随机数值(但不是在回发时),然后检查随机数值是否被发送两次。如果它被第二次发送,那就是刷新。

    【讨论】:

    • 谢谢BoltClock ...接受这个答案,因为这是问题的正确答案(区分“刷新帖子”或“真实回帖”)..其他两个答案谈到了一个绝妙的解决方案避免回发问题
    【解决方案3】:

    你可以试试

    protected void Button1_Click(object sender, EventArgs e)
    {
        //your code of Click event
        //..............
        //...............
        // and then add this statement at the end
        Response.Redirect(Request.RawUrl); // Can you test and let me know your findings
    }
    

    【讨论】:

    • 你应该小心 Request.RawUrl;这使您容易受到 XSS 攻击
    • +1 谢谢 Muhammad.. 问题已完全通过您的解决方案解决.. 尝试过 Response.Redirect(Request.RawUrl);它工作得很好
    【解决方案4】:

    已接受答案的示例工作代码

    在设计器中添加这一行

      <input type="hidden" runat="server" id="Tics1" value="GGG" />
    

    在后面的代码中添加以下行

     public partial class WebForm1 : System.Web.UI.Page
    {
    
        long tics = DateTime.Now.Ticks;
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.Tics1.Value = tics.ToString();
                Session["Tics"] = tics;
            }
        }
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (Session["Tics"] != null && Request["Tics1"] != null)
            {
                if (Session["Tics"].ToString().Equals((Request["Tics1"].ToString())))
                {
                    Response.Write("Postback");
                }
                else
                {
                    Response.Write("Refresh");
                }
            }
            this.Tics1.Value = tics.ToString();
            Session["Tics"] = tics;        
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      相关资源
      最近更新 更多