Я сталкиваюсь с этой проблемой и использую следующий код. Это хорошо работает для меня.

могу узнать, нажал ли пользователь клавишу F5, чтобы обновить мою страницу (что-то вроде того, как SO реализовал. Если вы обновите страницу, счетчик вопросов не увеличится). Я протестировал много фрагментов кода, упомянутых в дюжине учебных пособий, но ни один из них не работал правильно.

Чтобы быть более ясным, предположим, что у меня есть пустая веб-форма и я хотел бы определить, нажал ли пользователь клавишу F5 на стороне клиента (в результате чего обновление не было отправлено) или нет.

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

Благодарю.

Обновить: Единственный обходной путь, который я смог найти, - это унаследовать мои страницы от базовой страницы, переопределить метод загрузки, как показано ниже:

    public class PageBase : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        this.Session["LastViewedPage"] = Request.RawUrl;
    }
}  

и на каждой странице, если мне было интересно узнать, если это обновление:

if (this.Session["LastViewedPage"].ToString() == Request.RawUrl)
{
    // This is a refresh!
}

Ответы на вопрос(2)

Ваш ответ на вопрос