0

現在、LatestNews、required:false というセクションがレイアウトで定義されているサイトがあり、2 つを除くすべてのビューには同じ呼び出し RenderPartial("ShowLatestNews") を持つセクションがあります。

これを行うより良い方法はありますか?つまり、DRY の原則に従います。1 か所で定義し、それらの 2 つのビューでのみ非表示にするか使用しないでください。

アップデート -

現在、レイアウトはユーザーに基づいて dbconfig から動的に選択されています理想的には、コントローラーとアクションの組み合わせに基づいてレイアウトを切り替えたくありません

4

2 に答える 2

1

この質問が開く方向は本当にたくさんあります。これらの道の多くは、現在の設計によって決定されます。

他の人はカットアンドペーストのソリューションですが、


現在、ウェブサイトのマスター レイアウトとは完全に異なるが、互いに類似している 2 つのページ (管理ページなど) または他の「予測可能な」ページと同じレイアウトのページがあるとします。次に、これらのページのレイアウトを変更することをお勧めします - それぞれのレイアウトを用途別に多様化します:

管理ページ

@{ 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
}

通常のページ

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

しかしここで、これらのページをメイン レイアウトから切り離したいが、いくつかの情報 (例: 管理者、VIP タブ) に基づいて少し異なる必要があるというあなた/私/誰でも、ここでアイデアが少し変わるとしましょう。コントローラーに何をすべきかを決定させたいか、ビューに既にこの情報がありますか...データは理想的にはViewModelまたはViewBagまたはSessionデータに入れることができます-これも依存します:)

ユーザー別 - HTTP コンテキスト (カット アンド ペースト ソリューション...)

<div id="specific-content">
    @if (User.Identity.IsAuthenticated && User.IsInRole("admin")) <!--RoleProvider-->
    {
        <div>My Admin Content!</div>
        <!--In your case render something (or not)!-->
        @{ Html.RenderPartial(...); }
    }
    else
    {
        <div>I'm not special :( </div>
    }
</div>

または、上記のコードをレイアウトまたはページに配置する代わりに、Partial

彼らも私が考えていたもう1つのことです。それは、ユーザーが特定の人である場合にページにリダイレクトすることです。これは私が大ファンではありません-レイアウトとUserビューに固執します。

これらは私が念頭に置いていたより単純なアイデアです。

于 2013-05-23T00:07:45.453 に答える