国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net防止刷新時重復(fù)提交(可禁用工具條刷新按鈕)

2024-07-10 12:41:01
字體:
供稿:網(wǎng)友
前段時間遇到了需要禁用刷新的需求,f5按鈕就不說了,簡單的js就能把它禁用,但是工具條上的刷新按鈕卻傻傻干不掉。

如果簡單的在刷新時重新加載畫面,通過window.location.href="url"可以很容易的實現(xiàn),但是需求是要求在刷新時什么都不做,保留畫面的狀態(tài),這下子可就復(fù)雜化了。

asp.net中分辨請求是重新請求還是通過刷新按鈕再次請求不是很方便,為了實現(xiàn)這個效果,試過了很多的方式,一下面的兩種為例
1.
代碼如下:
private bool pageRefreshed = false; //頁面是否刷新提交
private bool refreshState = false; //ViewState中暫存的狀態(tài)

然后重寫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";
}
}

這種方法雖然能夠?qū)崿F(xiàn),但是在某些請款下不適應(yīng)。如果畫面上同時存在文本框和按鈕式,設(shè)置按鈕的autopostback="True"時,在修改完文本框的值,直接點擊按鈕(在文本框沒有失去焦點時,直接點擊按鈕),這時的執(zhí)行順序是textchanged→textchanged→buttonclick,在第一次textchanged時,就把狀態(tài)已經(jīng)變成了true,按鈕的不能執(zhí)行。

2.codeproject找到了另外一種解決方法
這種方式能夠準確的判斷是否是通過瀏覽器的刷新按鈕進行的請求,而且使用起來也非常簡單!
1.引用dll,修改配置文件
在配置文件中添加modules
代碼如下:
<system.web>
<httpModules>
<add name="RefreshModule"
type="RefreshModule.Module, RefreshModule"/>
</httpModules>
</system.web>

PS:wbapplication的情況下需要改成在system.webServer的modules的節(jié)點下追加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這個參數(shù)就是用來判斷是否是通過瀏覽器的書刷新按鈕進行的請求。其他的行為行為控制參照原文。PS:codeproject真是個不過的地方,很多問題都是通過它來解決的其他的方式不一一列舉,列舉的第二種方式可以說簡單易用,所有的實現(xiàn)都已經(jīng)為我們封裝好了,只需要簡單的調(diào)用。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东山县| 贵德县| 嘉禾县| 富平县| 西林县| 庄浪县| 镇原县| 新丰县| 奇台县| 黑水县| 东海县| 株洲县| 诏安县| 台北市| 荥阳市| 马鞍山市| 福安市| 车致| 通化市| 榕江县| 盖州市| 西藏| 洛川县| 习水县| 广安市| 江安县| 兰溪市| 兰西县| 准格尔旗| 隆德县| 彭泽县| 台南市| 神农架林区| 烟台市| 文安县| 德兴市| 惠州市| 夏邑县| 清丰县| 鞍山市| 黄骅市|