Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent Page Refresh in C#

Duplicate of Asp.Net Button Event on refresh fires again??? GUID?

hello, ive a website and when a user click a button and the page postback, if the user refresh the Page or hit F5 the button method is called again.

any one know some method to prevent page refresh with out redirect the page to the same page again ?

something like if (page.isRefresh) or something... or if exist any javascript solution is better.

this seen to works.... but when i refresh it does not postback but show the before value in the textbox

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 + "@";

    }
}
like image 639
jmpena Avatar asked Dec 10 '22 21:12

jmpena


1 Answers

Thanks for comments and sorry for my mistake, I found this code in: http://www.codeproject.com/KB/aspnet/Detecting_Refresh.aspx And this time tested ;)

    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());
    }
like image 111
Saber Avatar answered Dec 26 '22 16:12

Saber