13

だから私はレイアウトページを持っています

<head>
    @RenderSection("HeaderLast", required: false)
</head>

ビュー

@section HeaderLast
{
    <script src="@Url.Content("~/Scripts/knockout-1.2.0.js")"
                            type="text/javascript"></script>
}

<div id="profile-tab">
        @{ Html.RenderPartial("_userProfile"); }
</div>

そして部分的なビュー

@section HeaderLast
{
    <script type="text/javascript">
        alert('test');
    </script>
}

<div......

そう簡単にはいかないと思いました。これをすぐに使用できる適切な方法はありますか?それとも、コンテンツを手動でレイアウト ページにバブルアップさせるために、ある種のメディエーターと ViewData の周りに何かを渡す必要がありますか?

報奨金が開始されました:報奨金は、この短命のために提供された最善の解決策に報われます。回答が提供されない場合は、この質問に最初に回答した @SLaks に授与します。

4

5 に答える 5

8

部分ビューでセクションを定義することはできません。

代わりに、Javascript をに配置し、レイアウト ページでViewBag見つかった Javascript を出力できます。ViewBag

于 2011-05-12T17:16:56.893 に答える
6

@JasCav: パーシャルに独自の CSS が必要な場合、それをレンダリングする良い方法がありません。

それがその使用の理由である場合、それは設計によるものである可能性が非常に高い.

別の CSS ファイル x パーシャル/ヘルパーを用意したくない場合。それぞれの個別の CSS ファイルは、サーバーからそれを取得するための個別の要求を意味するため、ページをレンダリングする時間に影響する追加のラウンドトリップを意味することに注意してください。

また、パーシャル/ヘルパーから HTML に直接 CSS を発行したくありません。代わりに、サイトの CSS ファイルですべての外観を定義するために使用できる適切なフックが必要です。

CSS で使用できるのと同じフックを使用して、JavaScript が有効になっている場合に、関連する要素のカスタム JavaScript 動作を有効にすることができます。

最後に、部分ビューではなく、一部のページに使用する追加のレイアウトが必要な場合があります。そのアプローチでは、次のようになります。

  • おそらく現在お持ちのように、_ViewStart で自動的に設定されるマスター レイアウト。これにより、サンプルのようなセクションが定義されます。
  • 子レイアウト ページ。ここには、これらのビューに必要な追加の html、css、js の両方があります。これは、 @RenderBody() と @section SomeSection { } の両方を使用して、共通の追加レイアウトを構築します。
  • 子レイアウトを指すビューと、デフォルトのマスター レイアウトを使用するビューがあります。

子レイアウトに追加データを取得する方法は質問の範囲外ですが、いくつかのオプションがあります。エンティティの共通基盤を持つように。ViewBag を使用するか、Html.RenderAction を呼び出して、レイアウト内の共有動的要素に関連する共有ロジックを取得します。

于 2011-05-17T17:00:21.907 に答える
1

ヘルパーメソッドとテンプレート化されたデリゲートを使用した別のアプローチは次のとおりです http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx

于 2011-08-19T09:53:30.660 に答える
1

SO に同様の質問があったようです - How to render JavaScript into MasterLayout section from partial view? .

残念ながら、部分ビュー内でセクションを宣言する可能性はありません。これは、RenderPartial が完全に別のビュー ページをレンダリングすることになるためです。少し醜いですが、これには回避策があります。ただし、ViewData の代わりに厳密に型指定されたモデルを使用すると、見栄えが良くなります。

基本的に、RenderPartial を呼び出したビューへの参照を追跡し、渡されたオブジェクトで DefineSection メソッドを使用してデータをそのビューにプッシュする必要があります。

更新: RenderSection の取り扱いに関するブログ投稿もあり、役に立つと思われます。

于 2011-05-24T12:34:06.343 に答える
0

私の質問へのフォローアップとして、JavaScript/CSS コンバイナー/ミニファイア ツールCassetteはこの機能をサポートしており、パーシャルに必要な JavaScript やその他のアセットを区分化できます。

サイト ライセンスを購入し、これをすべての MVC アプリケーションで使用しています。

于 2011-10-28T14:42:14.927 に答える