注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

╰此情可待成追忆

当没有阳光时,我自己便是阳光,当没有快乐时,我自己便是快乐

 
 
 

日志

 
 

ASP.NET 判断页面是刷新还是提交  

2011-07-22 09:50:31|  分类: asp.net |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

方法一:

建立一个类:

using System;
using System.Collections.Generic;
using System.Text;

namespace DBUtility
{
    //class CheckRefresh
    //{
    //}
    public class CheckRefresh : System.Web.UI.Page
    {
        private bool _refreshState;
        private bool _isRefresh;

        public bool IsRefresh
        {
            get
            {
                return _isRefresh;
            }
        }

        protected override void LoadViewState(object savedState)
        {
            object[] allStates = (object[])savedState;
            base.LoadViewState(allStates[0]);
            _refreshState = (bool)allStates[1];
            _isRefresh = _refreshState == (bool)Session["__ISREFRESH"];
        }

        protected override object SaveViewState()
        {
            Session["__ISREFRESH"] = _refreshState;
            object[] allStates = new object[2];
            allStates[0] = base.SaveViewState();
            allStates[1] = !_refreshState;
            return allStates;
        }
    }

}

然后在页面调用: public partial class wytw : DBUtility.CheckRefresh

整体的:


using System;

namespace YZS.Web.UI
{
public class Page : System.Web.UI.Page
{
   private bool _refreshState;
   private bool _isRefresh;

   public bool IsRefresh
   {
    get
    {
     return _isRefresh;
    }
   }

protected override void LoadViewState(object savedState)
   {
    object[] allStates = (object[]) savedState;
    base.LoadViewState(allStates[0]);
    _refreshState = (bool) allStates[1];
    _isRefresh = _refreshState == (bool) Session["__ISREFRESH"];
   }

protected override object SaveViewState()
   {
    Session["__ISREFRESH"] = _refreshState;
    object[] allStates = new object[2];
    allStates[0] = base.SaveViewState();
    allStates[1] = !_refreshState;
    return allStates;
   }
}
}

在页面类从public class MYtest : YZS.Web.UI.Page继承,然后在页面中可通过调用

if(IsRefresh)
     //刷新
else
//提交


方法二:

建立一个控件CheckRefreshed.ascx

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Online
{
    public partial class CheckRefreshed : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        public bool isRefreshed
        {
            get { if (_flag.HasValue) return _flag.Value; else { _flag = this.Cache[Num] != null; return _flag.Value; };}
        }

        private bool? _flag;

        private string Num
        {
            get { if (ViewState["num"] == null) return Guid.NewGuid().ToString(); else return (string)ViewState["num"]; }
            set { ViewState["num"] = value; }
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            this.Page.Unload += new EventHandler(Page_Unload);
            _num = Num;
            Num = Guid.NewGuid().ToString();
        }

        private string _num;

        void Page_Unload(object sender, EventArgs e)
        {
            this.Cache[_num] = 1;
        }

    }
}

然后在页面中

这个用户控件运行时没有界面显示。当你把它放入页面,就可以在页面中访问它的 isRefreshed 属性,判断这个页面是否是浏览器点“刷新”而重复提交来的。

可以这样检验这个用户控件:


ASP.NET 判断页面是刷新还是提交 - adyhpq - adyhpq的个人主页ASP.NET 判断页面是刷新还是提交 - adyhpq - adyhpq的个人主页HTML Code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="CheckRefreshed.ascx" tagname="CheckRefresh" tagprefix="uc1" %>
<!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">
    <asp:Button ID="Button1" runat="server" EnableViewState="False" 
        onclick="Button1_Click" Text="Button" />
    <uc1:CheckRefresh ID="CheckRefresh1" runat="server" />
    </form>
</body>
</html>

 


ASP.NET 判断页面是刷新还是提交 - adyhpq - adyhpq的个人主页ASP.NET 判断页面是刷新还是提交 - adyhpq - adyhpq的个人主页C# Code
using System;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Button1.Text = this.CheckRefresh1.isRefreshed.ToString();
    }
    protected void Page_PreRender(object sender, EventArgs e)
    {
        this.Button1.Text += "," + this.CheckRefresh1.isRefreshed.ToString();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Button1.Text += "," + this.CheckRefresh1.isRefreshed.ToString();
    }
}

 

      这个测试页面打印page_load、之后的控件客户端操作触发的事件、page_prerender时候的状态。注意EnableViewState="False" ,因此打印的是页面即时的值。这个测试基本可以说明,在页面输出html之前,包括所有控件的PreRender甚至Render过程中,都可以正确地读取控件的 isRefreshed 属性来判断当前页面是否是“刷新”而来的。当然,如果页面显示之后,应用程序恰好被重启了,那么是不能立刻紧接着的刷新操作中检查出来它是重复应用程序重启以前的页面的了。

  评论这张
 
阅读(395)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018