屏蔽重复提交表单

简介:

读了城南的博客中的《屏蔽刷新提交后台》一文之后,对于解决屏蔽重复提交表单有了更好的认识。

对于重复提交表单个人觉得有以下解决方案:
1、利用Ajax提交,这样的自然而然的不会再涉及到重复提交表单。
2、利用前后台标记,判断是否是重复提交-----------也就是城南博客中的方法。

个人学习了城南博客中的方法,加以自己的理解,做了下修改。

主要是的思想是:

  自己写一个类,去继承System.Web.UI.Page类,在此类中对Page类扩展。即:在页面下Render到页面时,发送一个到页面的Hide控件并增加一个Session。当再次访问时判断发回的控件的值和Session值是否一致,从而确定当前操作是否是有刷新导致的提交。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///Basepage 的摘要说明
/// </summary>
public class Basepage:System.Web.UI.Page
{
    private static string PAGE_REFRESH_TICKET_KEY = "__111111111111Key";
    private string PAGE_SESSION_REFRESH_TICKET_KEY = "__2222222222Key";
    protected override void OnPreRenderComplete(EventArgs e)
    {
        SynchroRefreshTicket();
        base.OnPreRenderComplete(e);
    }

    /// <summary>
    /// 同步页面和后台Session的票据
    /// </summary>
    private void SynchroRefreshTicket()
    {

        string strTicket = Guid.NewGuid().ToString();
        ClientScript.RegisterHiddenField(PAGE_REFRESH_TICKET_KEY, strTicket);

        Session[PAGE_SESSION_REFRESH_TICKET_KEY] = strTicket;

    }

    /// <summary>
    /// 比较HiddenField的票据和Session中存储的票据是否相同,如果不相同则为通过刷新的方式进行的提交
    /// </summary>
    protected bool IsRefreshed
    {
        get
        {
            if (Page.IsPostBack)
            {
                if (string.Equals(Request.Form.Get(PAGE_REFRESH_TICKET_KEY), Session[PAGE_SESSION_REFRESH_TICKET_KEY]))
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            return false;
        }
    }
 
}
复制代码
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default :Basepage //继承自己写的类
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (this.IsRefreshed)
        {
            //如果是重复提交的话,就重新加载本页面
            //Response.Redirect(Request.Url.ToString());
            Response.Write("刷新");
        }
        else
        {
            Response.Write("提交");
        }
    }
}
复制代码
复制代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <asp:Label ID="Label1" runat="server"></asp:Label>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    </div>
    </form>
</body>
</html>
复制代码

 



本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/archive/2013/03/23/2977337.html,如需转载请自行联系原作者

目录
相关文章
|
9天前
|
人工智能 运维 安全
|
7天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
671 23
|
7天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
14天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
1097 110
|
人工智能 数据可视化 数据挖掘
Quick BI 体验&征文有奖!
瓴羊生态推出Quick BI 征文激励计划,鼓励用户分享数据分析实践经验与技术洞察,征集高质量原创文章。内容围绕AI功能体验与BI案例实践,设季奖、年奖及参与奖,优秀作者可获现金奖励、产品内测资格及官方认证形象。投稿截止至2026年3月31日。
Quick BI 体验&征文有奖!