Search code examples
c#javascriptasp.netcheckboxpage-refresh

ASP Checkbox being checked after refresh


So basically i have a ASP checkbox that handles auto refresh. If it is checked then the page will refresh after every 5 minutes, when its unchecked it will not refresh

I am getting issue with when I uncheck the checkbox the page still refreshes after 5 minutes even tho it shouldn't.

This is the ASP for the checkbox

    <asp:CheckBox ID="chkAutoRefresh" runat="server" AutoPostBack="True" style="position:absolute; top: 48px; left: 908px; height: 6px; font-family: Arial, Helvetica, sans-serif; font-size: 11px; right: 219px;"
                    Checked="true" Text="Auto refresh" />

This is the call

    <meta http-equiv="refresh" content="<%= GetRefreshTime() %>"/>

This is the code behind

    protected string GetRefreshTime()
    {
        if (chkAutoRefresh.Checked)
        {
            return ConfigurationSettings.AppSettings["AutoRefreshTime"]; //refresh for every 5 min
        }
        else
        {
            return string.Empty; //if not checked do not refresh
        }
    }

where am i going wrong?


Solution

  • What you are missing here is that with using meta refresh your whole page is being reloaded. The data about checkbox, if it is checked or not, is lost (ViewState is emptied).

    What you should do is save the checkbox checked data in some more persistent state, which is kept through reloads, Session object for example.

    And then always use the value from the Session instead (of course if the user changes the checkbox value, change the value in Session also).

    Example

    HTML:

    <asp:CheckBox OnCheckedChanged="chkAutoRefresh_CheckedChanged" ID="chkAutoRefresh" runat="server" AutoPostBack="True" Text="Auto refresh" />
    

    CODE BEHIND:

    protected void Page_Load(object sender, EventArgs e)
        {
            // on every "first" page load which is also every refresh through meta refresh tag
            // this one will not be executed when we click checkbox which is a true postback
            if (!IsPostBack)
            {
                Response.Write("Refreshed! " + DateTime.Now);
                AutoRefreshSite();
            }
        }
    
        protected void chkAutoRefresh_CheckedChanged(object sender, EventArgs e)
        {
            // store value into session
            Session["autorefresh"] = chkAutoRefresh.Checked;
            // call method where you enable/disable auto refresh
            AutoRefreshSite();
        }
    
        protected void AutoRefreshSite()
        {
            if (Session["autorefresh"] != null)
            {
                // append meta refresh tag
                if (bool.Parse(Session["autorefresh"].ToString()))
                {
                    HtmlMeta tag = new HtmlMeta();
                    tag.HttpEquiv = "refresh";
                    tag.Content = "5";
                    Header.Controls.Add(tag);
                    chkAutoRefresh.Checked = true;
                }
            }
        }