2010-12-12 24 views
0

がコントローラに書き込まれるように書かれたコードは、です:このコードはどこに置く必要がありますか?ここで

CategoryRepository categoryRepo = new CategoryRepository(); 
var categories = categoryRepo.FindAllCategories(); 
ViewBag.Categories = categories; 

今私は動的カテゴリーの素敵なリストを作成し、これを使用したいと思います。

<div id="leftnavigationbar">     
    <ul> 
     @foreach (var category in ViewBag.Categories) 
     { 
      //Create li here.  
     } 

     <!-- ActionLink goes: Text, ActionName, Controller --> 
     <li>@Html.ActionLink("Libros", "Index", "Home")</li> 
     <li>@Html.ActionLink("Peliculas, Musica & Juegos", "Index", "Anuncios")</li> 
     <li>@Html.ActionLink("Computadoras", "Index", "Usuarios")</li> 
     <li>@Html.ActionLink("Bienes Raices", "Index", "Ayuda")</li> 
     <li>@Html.ActionLink("Bolsa de Trabajo", "Index", "Contacto")</li> 
     <li>@Html.ActionLink("Deportes y Fitness", "Index", "Contacto")</li> 
     <li>@Html.ActionLink("Electronicos y Celulares", "Index", "Contacto")</li> 
    </ul>    
</div> 

今、このコードを_Layout.cshtmlファイルに書き込んでいます。しかし、私はいつもマスターページのように動作するように、これを書く場所を知りたいと思います。

提案がありますか?

編集:

私の最初の意図が不可能であることが表示されます。

@foreach (var category in ViewBag.Categories) 
{ 
    <li>@Html.ActionLink(category.Name, "Index", "Home")</li> 
} 

私がしようとしていることを達成するための提案はありますか?カテゴリのリストを引っ張り、foreachループを使ってそれらをレンダリングするだけです。それをどこかに置いて、すべてのページで見ることができます。

答えて

0

「パーシャルビュー」と呼ばれるものを探しています。

1

いつものように、あなたは、ビューモデルを作成することで起動します。

public ActionResult Index() 
{ 
    var categories = categoryRepo.FindAllCategories(); 
    var model = MapModelToViewModel(categories); 
    return View(model); 
} 

そして最後に、あなたの強く型付けされたビューの表示テンプレートを使用することができます。

public class CategoryViewModel 
{ 
    public string CategoryName { get; set; } 
} 

次に、あなたのコントローラには、ビューモデルがいっぱい。明らかビューが強くIEnumerableを

<ul> 
    @Html.EditorForModel() 

    <!-- ActionLink goes: Text, ActionName, Controller --> 
    <li>@Html.ActionLink("Libros", "Index", "Home")</li> 
    ... 
</ul>    

そして、あなたの表示テンプレートに入力することになる(〜/ビュー/ホーム/ DisplayTemplates/CategoryViewModel.cshtml):

@model YourApp.Models.CategoryViewModel 
<li>@Model.CategoryName</li> 

あなたは強く型付けされたビューで見ることができるようにし、表示テンプレートでは、ビューにループを記述する必要はありません。

表示テンプレートの代わりにHtml.ActionまたはHtml.RenderActionヘナーを使用できます。フィル・ハックはそれらについてnice blog postと書いています。私は、このコードはあなたのマスターテンプレートにあり、あなたはビューモデルを持っていないので、あなたは醜いタイプのViewBagを使わなければならないと思われます。 (~/Views/Categories/Index.cshtml)を

public class CategoriesController: Controller 
{ 
    public ActionResult Index() 
    { 
     var categories = categoryRepo.FindAllCategories(); 
     var model = MapModelToViewModel(categories); 
     return View(model); 
    } 
} 

をそしてカテゴリをレンダリングするの世話をする、対応する部分図を持っている:いいえ問題は、Html.Actionでこれを実行する特定のコントローラがありませんでした

@model IEnumerable<YourApp.Models.CategoryViewModel> 
@Html.DisplayForModel() 

をと最後に同じ表示テンプレートを使用します。

<ul> 
    @Html.Action("index", "categories") 

    <!-- ActionLink goes: Text, ActionName, Controller --> 
    <li>@Html.ActionLink("Libros", "Index", "Home")</li> 
    ... 
</ul>    

は、今すぐあなたのマスターページには、単にこの子アクションを含めることができます

関連する問題