2013-03-20 16 views
5

私のASP.NET MVC Webサイトでは、人々はさまざまなCSSスタイルの中から選択できます。将来、これらの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に、私はスタイルシートをロードするには、この行を使用します。

<link href="@Url.Action("CssStyle", "Home")" rel="stylesheet" type="text/css" /> 

このCssStyle()メソッドがデータベースへのリクエストを行い、すべてのページがロードされるとクエリを実行するとします。これらの不要なリクエストを防ぐにはどうすればよいでしょうか?おそらくセッション?

+0

がどのように多くのスタイルシートあなたが持つことを計画します:

あなたがセッションを使用していないソリューションが必要な場合は、一日あたりのCSSファイルあたり最大1つのDBアクセス時に、あなたはこのような何かを行うことができます言いますか?プレーンテキストを格納する代わりに、ハッシュマップ/列挙型を使用することをお勧めします。 –

+0

テーマフォルダはどうですか? http://stackoverflow.com/questions/769878/asp-net-mvc-themes-how-to – Amitd

答えて

3

重要なときにクエリを実行します(ログイン時など)。SessionにCSSファイル名を保存します。ユーザーがスタイルを変更できるプロファイルページを持っている場合は、Session変数を更新する必要があります。変更するとすぐに新しいスタイルが表示されます。

次に、あなたの方法では、Sessionのうち、その値を引く:例えば

var cssFile = Session["UserStyle"]; 

を。

0

私はそれをキャッシュするか、セッション変数に格納することをお勧めします。

このようにして、毎回不必要にデータベースにアクセスする必要はありません。

0

まず、この操作を最適化する必要があることを確認しましたか?セッションを使用している場合は、通常、ファイルシステムにアクセスしています。これは、少なくともローカルインストールではDBアクセスと同じオーダーです。

DBがリモートであり、非常に低速な接続であると仮定して、DBアクセスを減らす努力をする価値があります。

また、ユーザがスタイルシートをどのように選択するかは不明であるため、ある種のパラメータがあると仮定しています。

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"); 
} 
関連する問題