6

私は部分的なビューを持っていて、どのレイアウトからも継承のトレースはありません。しかし、ビューの内部で(レンダリングして)使用したいときはいつでも、レイアウトはビューに対して1回、部分ビューに対して1回繰り返されます。 This postは、空のレイアウトを作成することを提案しています。しかし、これは回避策だと思います。部分的なビューの読み込みレイアウト(マスターレイアウト)を停止する方法はありますか?マスターレイアウトを使用するコードがないときになぜロードされるべきなのか理解できません。これは、ASP.NETでページを作成し、<%@ Master ...ディレクティブを持たずにマスターページから継承するようなものです。パーシャルビューはマスターレイアウトから継承します

これは私の部分図である。

@{ 
    Layout = null; 
} 
+0

あなたの部分ページの最初の行とコントローラの動作方法を表示できますか? –

答えて

13

@* Recursive category rendering *@ 
@using Backend.Models; 

@{ 
    List<Category> categories = new ThoughtResultsEntities().Categories.ToList(); 
    int level = 1; 
} 

@RenderCategoriesDropDown(categories, level) 

@helper RenderCategoriesDropDown(List<Category> categories, int level) 
{ 
    List<Category> rootCategories = categories.Where(c => c.ParentId == null).ToList(); 
    <select id='categoriesList' name='categoriesList'> 
    @foreach (Category rootCategory in rootCategories) 
    { 
     <option value='@rootCategory.Id' class='level-1'>@rootCategory.Title</option> 
     @RenderChildCategories(categories, level, rootCategory.Id); 
    } 
    </select> 
} 

@helper RenderChildCategories(List<Category> categories, int level, int parentCategoryId) 
{ 
    string padding = string.Empty; 
    level++; 
    List<Category> childCategories = categories.Where(c => c.ParentId == parentCategoryId).ToList(); 
    foreach (Category childCategory in childCategories) 
    { 
      <option value='@childCategory.Id' class='[email protected]'>@padding.PadRight(level, '-') @childCategory.Title</option> 
      @RenderChildCategories(categories, level, childCategory.Id); 
    } 
    level--; 
} 
+0

良い習慣。 PartialViewがActionResult型の1つであることはわかりませんでした。しかし、あなたがajaxで作業していないときや、部分的なビュー(ダッシュボードのようなもの)をまとめることに基づいてページを構築したいときはどうしますか?どちらの方法? –

+1

モデルの利用可能性に応じてRenderPartialまたはRenderActionを使用します –

9

は、レイアウトはあなたが好きなあなたの部分図でこれをオーバーライドしてみてください、あなたの~/Views/_ViewStart.cshtml

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

から来るかもしれません私はajax calを使って部分ページをレンダリングするときにこの問題を再現できましたls。

return View("partialpage") 

は常にレイアウトに付随します。私は明示的に呼び出してこの動作をオーバーライドしました

return PartialView("partialpage") 
+0

これは私のために働いた。ありがとうございました。しかしそれは変わっていないのですか? WebFormsでは、「このページにはマスターページがありません」、「このユーザーコントロールにはマスターページがありません」というようなものがあります。つまり、デフォルト値は 'Layout = null; 'であり、明示的に言う必要はないはずです。 –

+0

WebFormsビューエンジンでは、さまざまなファイル拡張子(部分文字列の場合は.ascx、ページの場合は.aspx)が使用されていました。一方、Razorはすべて同じ拡張子を使用しています。その理由が考えられるかもしれません(100%ではありません)。ところで、私はあなたの問題を再現できませんでした。あなたはどのようにあなたの部分を呼びますか?私は@ Html.Partial( "_ Foo")で試してみたところ、うまくいきました。 Layoutをnullに設定する必要はありません。 –

+1

'@ Html.Action(" PartialViewControllerAction ")'を使用しました。メソッドドキュメンテーションは、部分ビュー実行のレンダリング結果を返すことを示しています。 –

関連する問題