来自数据库的ASP.NET MetaTags

时间:2011-07-19 19:01:26

标签: asp.net caching

我正在开发一个网站,其中网站管理员可以在cms中改变网站的MetaTag,将这些MetaTag存储在MySql数据库中。

在public master.page中,在Page_Load事件中,我从数据库中获取这些MetaTag

sTitle = get_from_data_base();

using (HtmlMeta mTag = new HtmlMeta())
{ 
    mTag .Name = "Title"; 
    mTag .Content = sTitle; 
    Page.Header.Controls.Add(mTag); 
}

问题是每次加载页面时,master.page的加载事件都是从数据库加载那些MetaTag。

如何在加载元数据后保留缓存或类似内容,以便网站在每次请求时都不会访问数据库?

网站如何知道这些MetaTag何时更改以再次加载它们?

拜托,你能提供一个例子。

非常感谢。

2 个答案:

答案 0 :(得分:0)

要做的一个解决方案是在global.asax应用程序启动事件中加载一次数据,然后将结果添加到应用程序对象中,然后在您需要的每个页面中添加,从应用程序对象加载它。

在数据库中更改数据后,访问应用程序对象并进行更新。

如果您不知道如何处理global.asax或应用程序对象,我将发布代码。

void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup
            string sTitle = get_from_data_base();
            Application.Add("sTitle", sTitle);

        }
        public string get_from_data_base()
        {
            //update this to call the database and get the data
            return "Your data";
        }

在您的页面中写下以下内容:

string sTitle = Application["sTitle"].ToString();
            using (HtmlMeta mTag = new HtmlMeta())
            {
                mTag.Name = "Title";
                mTag.Content = sTitle;
                Page.Header.Controls.Add(mTag);
            }

当您的管理层正在更新元标记时,会附加以下行

Application["sTitle"] = "You manager entered string";

答案 1 :(得分:0)

最后,在你的答案和在互联网上阅读后,我去了Cache对象而不是Application对象。我读的更好,所以我最后的方法就是在全局类中添加它并从我的master.pages访问这个方法

    public static MetaTagsDN get_meta_tags()
    {
        MetaTagsDN oTags;

        if (HttpRuntime.Cache["MetaTags"] == null)
        {
            MetaTagsLN ln = new MetaTagsLN();
            oTags = ln.get_metatags();

            HttpRuntime.Cache["MetaTags"] = oTags;
        }
        else
        {
            oTags = (MetaTagsDN)HttpRuntime.Cache["MetaTags"];
        }

        return oTags;
    }

您怎么看?

感谢您帮助我......