刷新后选中ASP复选框

本文关键字:ASP 复选框 刷新 | 更新日期: 2023-09-27 17:49:33

所以基本上我有一个ASP复选框处理自动刷新。如果选中,则页面每隔5分钟刷新一次,如果未选中,则不刷新

我得到的问题,当我取消复选框的页面仍然刷新5分钟后,即使它不应该。

复选框的ASP
    <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" />

呼叫

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

这是

后面的代码
    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
        }
    }

我哪里错了?

刷新后选中ASP复选框

您在这里缺少的是使用元刷新您的整个页面正在被重新加载。关于复选框的数据,无论是否选中,都会丢失(ViewState清空)。

你应该做的是将复选框选中的数据保存在一些更持久的状态,通过重载保持,例如Session对象。

然后总是使用来自Session的值(当然,如果用户改变了复选框的值,也要改变Session中的值)。

例子HTML:

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

背后的代码:

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;
            }
        }
    }

不能使用<%= GetRefreshTime() %>设置<meta>标签的内容

所以在这种情况下,你可以使用HtmlMeta对象从Code-Bihide写标签。

protected void chkAutoRefresh_CheckedChanged(object sender, EventArgs e)
{
        HtmlMeta tag = new HtmlMeta();
        tag.HttpEquiv = "refresh";
        if (chkAutoRefresh.Checked)
        {
            tag.Content = "your content";
        }
        else
        {
            tag.Content = "";
        }
        Header.Controls.Add(tag);
}

希望它能正常工作。:)