Запретить обновление страницы в C #

Дубликат события кнопки Asp.Net при возобновлении огня снова??? GUID?

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

кто-нибудь знает какой-либо метод предотвращения обновления страницы без повторного перенаправления страницы на ту же страницу?

что-то вроде if (page.isRefresh) или что-то в этом роде ... или если существует какое-либо решение javascript, лучше.

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

http://www.dotnetspider.com/resources/4040-IsPageRefresh-ASP-NET.aspx

private Boolean IsPageRefresh = false;
protected void Page_Load(object sender, EventArgs e)
{        
    if (!IsPostBack)
    {
        ViewState["postids"] = System.Guid.NewGuid().ToString();
        Session["postid"] = ViewState["postids"].ToString();
        TextBox1.Text = "Hi";

    }
    else
    {
        if (ViewState["postids"].ToString() != Session["postid"].ToString())
        {
            IsPageRefresh = true;
        }
        Session["postid"] = System.Guid.NewGuid().ToString();
        ViewState["postids"] = Session["postid"];
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    if (!IsPageRefresh) // check that page is not refreshed by browser.
    {
        TextBox2.Text = TextBox1.Text + "@";

    }
}

person jmpena    schedule 05.04.2009    source источник


Ответы (5)


Спасибо за комментарии и извините за мою ошибку, я нашел этот код в: http://www.codeproject.com/KB/aspnet/Detecting_Refresh.aspx И на этот раз проверен;)

    private bool _refreshState;
    private bool _isRefresh;

    protected override void LoadViewState(object savedState)
    {
        object[] AllStates = (object[])savedState;
        base.LoadViewState(AllStates[0]);
        _refreshState = bool.Parse(AllStates[1].ToString());
        _isRefresh = _refreshState == bool.Parse(Session["__ISREFRESH"].ToString());
    }

    protected override object SaveViewState()
    {
        Session["__ISREFRESH"] = _refreshState;
        object[] AllStates = new object[2];
        AllStates[0] = base.SaveViewState();
        AllStates[1] = !(_refreshState);
        return AllStates;
    }

    protected void btn_Click(object sender, EventArgs e)
    {
        if (!_isRefresh)
            Response.Write(DateTime.Now.Millisecond.ToString());
    }
person Saber    schedule 05.04.2009
comment
это не работает для Refresh, когда вы обновляете страницу, он сообщает браузеру повторить последнее событие - person jmpena; 05.04.2009
comment
Это просто останавливает работу кнопки более одного раза, независимо от того, является ли сообщение перезагрузкой или фактическим нажатием кнопки. - person Guffa; 05.04.2009
comment
да, это работает. это тот же код, который я нашел, но когда вы нажимаете кнопку, а затем нажимаете кнопку «Обновить», отображается HI, а не новое значение. : P Я думаю, что смогу смириться, я попытаюсь изменить это. Благодарность - person jmpena; 06.04.2009
comment
но что, если в директиве страницы отключено состояние просмотра? - person PositiveGuy; 10.11.2009

Вы можете проверить свойство Page.IsPostBack, чтобы увидеть, отвечает ли страница на начальный запрос или обрабатывает ли она PostBack, например событие нажатия кнопки. Дополнительная информация: w3schools на IsPostBack

К сожалению, это не решит вашу проблему, поскольку IsPostBack будет истинным, когда пользователь нажимает кнопку, а также когда он обновляет страницу после того, как действие кнопки было выполнено.

Если вы выполняете такую ​​задачу, как выполнение CRUD для некоторых данных, вы можете Response: перенаправить пользователя обратно на ту же страницу после завершения обработки и обойти эту проблему. У него есть побочное преимущество перезагрузки вашего контента (при условии, что вы добавили запись в БД, которая теперь будет отображаться на странице ...) и предотвращает поведение проблемы обновления. Единственное предостережение - они все же повторно отправят форму, вернувшись к своей истории.

Постбэки были плохой реализацией для Asp.net и, как правило, разрушали для меня платформу Webforms.

person John Lewin    schedule 05.04.2009
comment
Response.Redirect не решает проблему. Пользователь по-прежнему может вернуться с помощью кнопки «Назад» в браузере и обновить страницу в том месте, где он отправил эту форму, и он все равно отправит другой запрос в БД. - person PositiveGuy; 10.11.2009

Это не решает проблемы.

Во-первых, сохранение токена в состоянии просмотра - не лучшая идея, поскольку его можно отключить. Вместо этого используйте состояние управления. Хотя HttpModule - лучшее решение.

В общем, это все равно не пойдет. Если вы откроете другую вкладку / окно, сеанс будет недействительным для предыдущей вкладки / окна. Поэтому и тормозил. Вы должны каким-то образом сохранять уникальное значение каждый раз при первой загрузке страницы. Используйте это, чтобы определить, откуда пришел запрос, а затем проверьте «заявку на обновление». Как видите, объект для одного пользователя может стать довольно большим в зависимости от количества сделанных запросов, где и как долго вы храните эту информацию.

Боюсь, что я не видел решения этой проблемы, потому что это довольно сложно.

person André Hedberg    schedule 22.02.2012

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

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

public bool IsPageRefresh = false;
protected void Page_Init(object sender, EventArgs e)
{
     if (IsPostBack)
     {
          var rForm = Request.Form;
          var vw = rForm["__EVENTVALIDATION"].ToString();
          var svw = Session["__EVENTVALIDATION"] ?? "";
          if (vw.Equals(svw)) IsPageRefresh = true;
               Session["__EVENTVALIDATION"] = vw;
     }
}
person Jorge Loreto    schedule 06.05.2019

person    schedule
comment
Где определяется bool IsPageRefresh;? - person bgmCoder; 12.01.2014
comment
лучше использовать его как глобальную переменную, а остальную часть кода в методе загрузки страницы, таким образом вы можете использовать IsPageRefresh в любое время. - person laertespl; 05.03.2014