2

レイアウト ページの本体を、実際の本体とサイドバーの 2 つのセクションに分割したいと考えています。そのサイドバーには、ビューで静的に定義するコントロールまたはデータをグループ化する 0、1、または複数の<div>要素を含めることができます。すべてのビューでこの div 構造を繰り返さないようにするために、これをレイアウト ページのセクションに分割したいと思います。ただし、ビューでセクションを複数回定義することはできないため、それらを繰り返すことはできません。

次のようにいくつかのサイドバー セクションを静的に定義できますが、これは汚い方法のようです。

<div id="sidebar1">
    @RenderSection("Sidebar1", false))
</div>
<div id="sidebar2">
    @RenderSection("Sidebar2", false))
</div>

このタイプのレイアウトを動的に定義する方法はありますか?

div ブロックにパラメーターをカプセル化する関数として使用できる、テンプレート化された Razor デリゲートについての言及をいくつか見ました。

@{ 
    Func<dynamic, object> div = @<div class="block">@item</div>;
}
@div("Block 1")
@div("Block 2")

しかし、これらは私が探しているものではないテキストのみを受け入れるようであり、レイアウトで定義されたときにビューに継承されません。

4

2 に答える 2

0

「テンプレート化された Razor デリゲート」は、「文字列」のみを受け入れるように制限されていません。デリゲートは次のように定義できます。

ビューで:

@model IEnumerable<SidebarViewModel>

@{ 
    Func<SidebarViewModel, object> div = @<div class="block">@item.Name</div>;
}

@foreach (var block in Model)
{ 
    @div(block)
}

デリゲートで完全な Intellisense サポートが得られます。

サンプル ビューモデル:

public class SidebarViewModel
{
    public string Name { get; set; }
}
于 2012-04-24T11:56:49.277 に答える
0

この問題に対処するためにこれ以上のセクションは必要ないと思います。代わりに、サイドバー セクションをレンダリングするときにできることは、ビューをレンダリングすることです (複数の div ロジックを動的に処理します)。

@section Sidebar
{
    @{Html.RenderAction("actiontorendermultipledivs", "Fromthiscontroller");}
}
于 2012-04-24T11:22:37.243 に答える