2009-07-03 1 views
1

Каждый раз, когда мой веб-страница загружается его запускает подпрограмму в page_load случае страницы, за которой Приращивает количества просмотров на 1.Как остановить событие Page_Load запуска, если страница обновляется

У меня есть проблема заключается в том, что процедура запускается даже при использовании обновления для перезагрузки страницы.

Как остановить эту процедуру от запуска, если страница была просмотрена конкретным пользователем в текущем сеансе?

Я думал, что я мог бы использовать:

If Not Page.IsPostBack Then 
(run the routine) 

, но это не похоже на работу.

Нужно ли использовать состояние сеанса или файлы cookie и т. Д.?

ответ

1

Вы могли бы записать ли пользователь посетил страницу в сессии. Вы могли бы просто разместить 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... 
    } 
} 
2

If Not Page.IsPostback поможет только в том случае, если пользователь нажмет кнопку на этой странице. Если пользователь просто обновляет страницу (например, используя F5), это не сработает. Проблемы заключается в том

  • вы хотите добавить к прилавку, если пользователь возвращается к странице после того, как он был на другую страницу вашего сайта (т.е. домашней страницы -> productpage -> домашней страницы) или нет.

Вы можете использовать словарь и хранить его в сеансе пользователя. Словарь будет Словарем типа Dictionary<string, int>. Когда пользователь посещает страницу, вы получаете словарь и видите, есть ли уже запись для текущей страницы + querystring (строковый ключ).

если нет, добавьте его. Затем в зависимости от того, хотите ли вы увеличивать счетчик для этой страницы, если пользователь пересматривает страницу после первого перехода на другую страницу, увеличите счетчик (или нет).

вы можете проверить, если пользователь пришел с другого сайта, используя: Request.UrlReferrer

Смежные вопросы