刷新后检查ASP复选框

时间:2014-03-11 11:21:16

标签: c# javascript asp.net checkbox page-refresh

所以基本上我有一个处理自动刷新的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
        }
    }

我哪里错了?

2 个答案:

答案 0 :(得分:0)

您无法使用<%= 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);
}

希望它能正常工作。 :)

答案 1 :(得分:0)

您在这里缺少的是使用元刷新,您的整个页面正在重新加载。有关复选框的数据(如果已选中或未选中)将丢失(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;
            }
        }
    }