每一個我的網頁加載它的時候運行在頁面的Page_Load事件例行其背後遞增1如何從運行停止Page_Load事件,如果刷新頁面
我的問題一的觀看次數即使使用刷新重新加載頁面,該例程也會運行。
如果頁面已被特定用戶在當前會話中查看,如何停止運行此例程?
我想我可以使用:
If Not Page.IsPostBack Then
(run the routine)
,但它似乎並沒有工作。
我需要使用會話狀態或cookie等嗎?
每一個我的網頁加載它的時候運行在頁面的Page_Load事件例行其背後遞增1如何從運行停止Page_Load事件,如果刷新頁面
我的問題一的觀看次數即使使用刷新重新加載頁面,該例程也會運行。
如果頁面已被特定用戶在當前會話中查看,如何停止運行此例程?
我想我可以使用:
If Not Page.IsPostBack Then
(run the routine)
,但它似乎並沒有工作。
我需要使用會話狀態或cookie等嗎?
您可以記錄用戶是否在會話中訪問該頁面。您可以在頁面路徑下的會話中放置一個bool。這樣它將適用於個人用戶,並且會在會話期間工作。
要記錄用戶訪問過的,你可以做以下頁面:
HttpContext.Current.Session[pagePath] = true;
,並得到用戶是否訪問過的頁面,你可以這樣做:
bool hasUserVisitedPage = (bool)HttpContext.Current.Session[pagePath];
這裏是如何它會在您的頁面加載中合併到一起:
protected void Page_Load(object sender, EventArgs e)
{
//set the default for whether the user visited the page
bool hasUserVisitedPage = false;
//get the path of the page
string pagePath = HttpContext.Current.Request.Url.LocalPath;
//find out if the user visited the page by looking in the session
try { hasUserVisitedPage = (bool)HttpContext.Current.Session[pagePath]; }
//we don't care if the value wasn't present (and therefore didn't cast)
catch {}
//if the user hasn't visited the page before
if (!hasUserVisitedPage)
{
//record that the page has now been visited
HttpContext.Current.Session[pagePath] = true;
//put the rest of your load logic here...
}
}
如果您想將此技術nique在多個頁面上我將這個功能封裝到一個輔助類中,所以你不會重複自己。
public static class PageHelper
{
public static bool hasPageBeenViewed()
{
//set the default for whether the user visited the page
bool hasUserVisitedPage = false;
//get the path of the page
string pagePath = HttpContext.Current.Request.Url.LocalPath;
//find out if the user visited the page by looking in the session
try { hasUserVisitedPage = (bool)HttpContext.Current.Session[pagePath]; }
//we don't care if the value wasn't present (and therefore didn't cast)
catch {}
//if the user hasn't visited the page before
if (!hasUserVisitedPage)
{
//record that the page has now been visited
HttpContext.Current.Session[pagePath] = true;
}
return hasUserVisitedPage;
}
}
然後,它會極大地簡化了負載邏輯如下: (它會給你的邏輯在一箇中心位置是,如果你需要改變它這將是非常方便的好處)
protected void Page_Load(object sender, EventArgs e)
{
//if the user hasn't visited the page before
if (!PageHelper.hasPageBeenViewed())
{
//put the rest of your load logic here...
}
}
If Not Page.IsPostback
只會幫助用戶點擊該頁面上的按鈕。如果用戶只刷新頁面(如使用F5),它將不起作用。 問題是
您可以使用字典並將其存儲在用戶的會話中。該詞典將是一個類型爲Dictionary<string, int>
的詞典。當用戶訪問該頁面時,您檢索字典並查看是否已有當前頁面+ querystring(字符串Key)的條目。
如果沒有,添加它。然後根據是否要增加該頁面的計數(如果用戶在首次進入另一頁面後重新訪問該頁面時增加計數器(或不))。
您可以檢查用戶的另一個網址來用:Request.UrlReferrer