本文共 2335 字,大约阅读时间需要 7 分钟。
读了的博客中的《》一文之后,对于解决屏蔽重复提交表单有了更好的认识。
对于重复提交表单个人觉得有以下解决方案:
1、利用Ajax提交,这样的自然而然的不会再涉及到重复提交表单。 2、利用前后台标记,判断是否是重复提交-----------也就是博客中的方法。个人学习了博客中的方法,加以自己的理解,做了下修改。
主要是的思想是:
自己写一个类,去继承System.Web.UI.Page类,在此类中对Page类扩展。即:在页面下Render到页面时,发送一个到页面的Hide控件并增加一个Session。当再次访问时判断发回的控件的值和Session值是否一致,从而确定当前操作是否是有刷新导致的提交。
using System;using System.Collections.Generic;using System.Linq;using System.Web;//////Basepage 的摘要说明/// 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); } ////// 同步页面和后台Session的票据 /// private void SynchroRefreshTicket() { string strTicket = Guid.NewGuid().ToString(); ClientScript.RegisterHiddenField(PAGE_REFRESH_TICKET_KEY, strTicket); Session[PAGE_SESSION_REFRESH_TICKET_KEY] = strTicket; } ////// 比较HiddenField的票据和Session中存储的票据是否相同,如果不相同则为通过刷新的方式进行的提交 /// 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" %>
本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/archive/2013/03/23/2977337.html,如需转载请自行联系原作者