• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net防止刷新时重复提交(可禁用工具条刷新按钮)
    前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉。

    如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了。

    asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例
    1.
    复制代码 代码如下:

    private bool pageRefreshed = false; //页面是否刷新提交
    private bool refreshState = false; //ViewState中暂存的状态

    然后重写Page的LoadViewState与SaveViewState方法:
    复制代码 代码如下:

    protected override void LoadViewState(object savedState)
    {
    object[] states = (object[])savedState;
    base.LoadViewState(states[0]);
    refreshState = (bool)states[1];
    if(Session["__PAGE_REFRESHED"] == null)
    pageRefreshed = false;
    else
    pageRefreshed = refreshState != (bool)Session["__PAGE_REFRESHED"];
    }
    protected override object SaveViewState()
    {
    Session["__PAGE_REFRESHED"] = !refreshState;
    object[] states = new object[2];
    states[0] = base.SaveViewState();
    states[1] = !refreshState;
    return states;
    }

    复制代码 代码如下:

    private void Button1_Click(object sender, EventArgs e)
    {
    if (pageRefreshed )
    {
    label.Text="this is refreshed function";
    }
    else
    {
    label.Text="this is new request function";
    }
    }

    这种方法虽然能够实现,但是在某些请款下不适应。如果画面上同时存在文本框和按钮式,设置按钮的autopostback="True"时,在修改完文本框的值,直接点击按钮(在文本框没有失去焦点时,直接点击按钮),这时的执行顺序是textchanged→textchanged→buttonclick,在第一次textchanged时,就把状态已经变成了true,按钮的不能执行。

    2.codeproject找到了另外一种解决方法
    这种方式能够准确的判断是否是通过浏览器的刷新按钮进行的请求,而且使用起来也非常简单!
    1.引用dll,修改配置文件
    在配置文件中添加modules
    复制代码 代码如下:

    system.web>
    httpModules>
    add name="RefreshModule"
    type="RefreshModule.Module, RefreshModule"/>
    /httpModules>
    /system.web>

    PS:wbapplication的情况下需要改成在system.webServer的modules的节点下追加modules
    2.定义刷新时的行为
    复制代码 代码如下:

    [Refresh()]
    public partial class Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    if(IsPostBack !RefereshHelper.IsPageRefreshed)
    {
    // do some work with the submitted date
    }
    else
    {
    // do some work when the page is loaded with the GET method
    }
    }
    }

    RefereshHelper.IsPageRefreshed这个参数就是用来判断是否是通过浏览器的书刷新按钮进行的请求。其他的行为行为控制参照原文。PS:codeproject真是个不过的地方,很多问题都是通过它来解决的其他的方式不一一列举,列举的第二种方式可以说简单易用,所有的实现都已经为我们封装好了,只需要简单的调用。
    您可能感兴趣的文章:
    • ASP.NET中为GridView添加删除提示框的方法
    • asp.net表单提交时防重复提交并执行前台的JS验证
    • Asp.Net防止刷新重复提交数据的办法
    • asp.net 处理F5刷新页面重复提交页面的一个思路
    • asp.net 防止用户通过后退按钮重复提交表单
    • Asp.Net中避免重复提交和弹出提示框的实例代码
    上一篇:C#中实现伪静态页面两种方式介绍
    下一篇:C#图片截取压缩(百分比压缩/大小压缩)实现代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    asp.net防止刷新时重复提交(可禁用工具条刷新按钮) asp.net,防止,刷新,时,重复,