极乐门资源网 Design By www.ioogu.com
前段时间遇到了需要禁用刷新的需求,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真是个不过的地方,很多问题都是通过它来解决的其他的方式不一一列举,列举的第二种方式可以说简单易用,所有的实现都已经为我们封装好了,只需要简单的调用。
如果简单的在刷新时重新加载画面,通过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真是个不过的地方,很多问题都是通过它来解决的其他的方式不一一列举,列举的第二种方式可以说简单易用,所有的实现都已经为我们封装好了,只需要简单的调用。
标签:
重复提交,刷新
极乐门资源网 Design By www.ioogu.com
极乐门资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com
暂无asp.net防止刷新时重复提交(可禁用工具条刷新按钮)的评论...
更新日志
2025年01月27日
2025年01月27日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]