2011-10-24 8 views
1

私はASP.NET MVCに新たなんだと私は私が動的に移入する必要があり、コンボボックス、との部分的な景色を眺めることができます。移入リストデータ部分図から

私の理解では、私はビューのViewBagにリストデータを置くことができ、そしてそれは私の部分図から利用可能になるということです。

はしかし、私はいくつかの異なるページからの部分的なビューを使用することができるようにしたいです。パーシャルビューを使用するすべてのページで、ViewBagにリストデータを設定する必要がありますか?私の部分的なビューの中にこれをカプセル化する方法はありますか?

答えて

1

ルック使用して、部分ビューでそれらにアクセスする必要があります:ViewModel Best Practicesを。リストデータを含むベースビューモデルを作成し、必要に応じて他のビューモデルを継承する必要があります。例えば

class ViewModelWithFooList 
    { 
     public List<Foo> FooList 
     { 
      get { return new List<Foo>() { new Foo("one"), new Foo("two"), new Foo("three") }; } 
     } 
    } 

あなたがする必要がある場合はViewModelWithFooListから他のビューモデルを継承することができます。コントローラで

public ActionResult GetList() 
    { 
     return View(new ViewModelWithFooList()); 
    } 

そして、あなたの意見で:

@Html.RenderPartial("FooList", Model.FooList); 

ビューと部分ビュー "FooListは" 強く型付けされなければなりません。

+0

私はそれを一度も使ったことはありませんが、[こちら](http://msdn.microsoft.com/en-us/library/system.web.mvc.html.childactionextensions.renderaction.aspx)を試してみてください。 –

1

あなたは

@Html.Partial("", yourData) 

を使用して、部分ビューにデータを渡すと、この質問で

@ViewData.Model 
+0

しかし、これはどこから行うのですか?部分表示を使用するすべてのページから? –

+0

はい。 ViewData.Modelがnullの場合はもちろん、「デフォルト」を定義できます。しかし、私の答えを使って、正しい方法です。 – dknaack

+0

ありがとうございます。これはアイテムのリストであり、デフォルト値はありません。しかし、私は部分的な視野内でこのロジックをカプセル化できないという事実に悩まされています。私が数十のビューからそれを使用する場合、リストを十数箇所に提供するコードを追加する必要があります。 –

1

これには子のアクションを使用できます。

だけViewBagを設定し、コンボボックス部分ビューを返しコントローラ内のアクションを行います。

[ChildActionOnly] 
public ActionResult MyDropDown() 
{ 
    ViewBag.DropDown = blah; 
    return PartialView(); 
} 

次に、そのドロップダウンリストを使用する必要のあるビューは、それを子のアクションとしてレンダリングします。

@{ Html.RenderAction("MyDropDown", "MyController"); } 
関連する問題