我应该如何根据用户设置加载CSS样式?

在我的ASP.NET MVC网站中,人们可以选择不同的CSS样式。 将来,这些css样式的名称将存储在数据库中。

我有以下方法(尚未与数据库通信)

public FileResult CssStyle() { string style = "/Content/wide-site.css"; if (!String.IsNullOrWhiteSpace(style)) { return File(style, "text/css"); } return File("/Content/site.css", "text/css"); } 

在我的_Layout.cshtml中,我使用这一行来加载样式表:

  

假设此CssStyle()方法向数据库发出请求,并且对于每个页面加载,它都会执行查询。 什么是防止这些不必要的请求的最佳方法? 也许会议?

重要时运行查询,例如登录时,然后将CSS文件名存储在Session 。 如果您有一个用户可以更改其样式的配置文件页面,您还需要刷新Session变量 – 这样当他们更改它时,他们会立即看到新样式。

然后在您的方法中,将该值从Session拉出:

 var cssFile = Session["UserStyle"]; 

例如。

我建议您将其缓存或存储在会话变量中。

这样你每次都不会不必要地去数据库。

首先,您确认需要优化此操作吗? 如果您正在使用会话,那么您通常访问文件系统,这与数据库访问时至少在本地安装上是相同的数量级。

将假设数据库是远程的并且通过非常慢的连接,因此值得努力减少数据库访问。

此外,还不清楚用户如何选择样式表,因此假设会有某种参数。

如果您想要一个不使用会话的解决方案,每天最多为每个CSS文件提供一次数据库访问,您可以执行以下操作:

 public FileResult CssStyle(variant which) { // Hash the function, date and which stylesheet to ensure global, // valid, unique, and easily replicated filename filename = md5("get_css_style" + today() + which) + ".css" if (!file_exists(filename)) { // DB operation here // create file here using filename } return File(filename, "text/css"); }