手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net防止刷新时重复提交(可禁用工具条刷新按钮)
asp.net防止刷新时重复提交(可禁用工具条刷新按钮)
摘要:前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉。如果简单的在刷新时重新加载画...

前段时间遇到了需要禁用刷新的需求,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防止刷新时重复提交(可禁用工具条刷新按钮)】相关文章:

asp.net下linkbutton的前后台使用方法

asp.net实现文件无刷新上传方法汇总

asp.net简化接收参数值的函数

asp.net(c#)两种随机数的算法,可用抽考题

asp.net xml序列化与反序列化第1/2页

asp.net页面防止重复提交示例

asp.net repeater实现批量删除时注册多选框id到客户端

ASP.Net防止刷新自动触发事件的解决方案

asp.net对URL含有中文参数的转换

asp.net替换和恢复html特殊字符

精品推荐
分类导航