2012-02-08 4 views
0

私はASP.net MVC 3の新機能です。私はCSSファイル "red.css"と "blue.css"を持っています。 Session["color"]=="red"とブラウザがred.cssを使用し、いつでもSession["color"]=="blue"とブラウザがblue.cssを使用するようにWebアプリケーションをコーディングしたいと思います。ASP.netのセッション値に基づいてCSSファイルを選択する方法MVC

ASP.net MVC 3でこれを達成するためのベストプラクティスは何ですか?

私はRazorビューエンジンを使用しています。

ビューが呼び出される前に、あなたはいくつかの点でセッション値を設定する必要がありますか、ToStringメソッドにアクセスするためのヌルエラーが発生します条件付き出力

@if (Session["color"].ToString() == "red") 
    { 
    <link href='@Url.Content("~/css/red.css")' rel="Stylesheet" type="text/css" /> 
    } 
    else 
    { 

    <link href='@Url.Content("~/css/blue.css")' rel="Stylesheet" type="text/css" /> 
    } 

をしようとする可能性があります。レイアウトビューで

+1

私はViewの 'Session'を参照できると想像していますが、私は' ViewBag'を使うと考えています。しかし、アプリケーション全体のすべてのViewResultで値を設定する必要があると思います。 –

答えて

0

()。

あなたはカミソリビュー上で直接それを行うことができます
0

@if(Session["color"] != null && Session["color"].ToString() == "blue") 
{ 
    <link href="@Url.Content("~/Content/blue.css")" rel="stylesheet" type="text/css" /> 
}else{ 
    <link href="@Url.Content("~/Content/red.css")" rel="stylesheet" type="text/css" /> 
} 
0

ビューでそれを行う必要がありますので、私には、プレゼンテーションの問題のように思えます。たとえば_Layout.cshtml.の場合は、ビュー内でSessionに直接アクセスすることができますので、悪い習慣ではないと思います。コントローラー内のSessionからViewBagに値を転送しても、ビュー内に同じif-ifの組み合わせがありますので、私と同じように見えます。

@{ 
    if((Session["color"] != null) && (Session["color"] == "red")) 
    { 
     @: <link href='@Url.Content("~/css/red.css")' rel="Stylesheet" type="text/css" /> 
    } 
    else 
    if((Session["color"] != null) && (Session["color"] == "blue")) 
    { 
     @: <link href='@Url.Content("~/css/blue.css")' rel="Stylesheet" type="text/css" /> 
    } 
    else {??} 

} 

あなたが本当にViewBagあなたのプロジェクトのためのベースのコントローラを持っているとControllerクラスのExecuteCoreを上書きすることができますし、それを転送するために主張する場合:

public abstract class MyAppBaseController: Controller 
{ 
    protected overrid void ExecuteCore() 
    { 
     ViewBag.CSSColor = Session["color"]; 
     base.ExecuteCore(); 
    } 
} 

そして、これはすべてのアクションの前に実行されます(あなたのコントローラーがこれを継承している場合)あなたは呼び出して、すべてのアクションメソッドでそれを処理する必要はありません。

もう一度、それはまさにあなたがビューで直接対処したいと思う種類のものです。そのため、最初のアプローチが私の選択です。

関連する問題