我正在开发一个网站,其中网站管理员可以在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何时更改以再次加载它们?
拜托,你能提供一个例子。
非常感谢。
答案 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;
}
您怎么看?
感谢您帮助我......