2011-10-24 103 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

我從來沒有使用它,但我認爲你也可以嘗試[this](http://msdn.microsoft.com/en-us/library/system.web.mvc.html.childactionextensions.renderaction.aspx)。 –

1

你應該使用

@Html.Partial("", yourData) 

數據傳遞到局部視圖並使用

@ViewData.Model 
+0

但我哪裏會做的呢?從每個使用部分視圖的頁面? –

+0

是的。如果ViewData.Model爲空,您可以定義「默認值」。但是,用我的答案是正確的。 – dknaack

+0

謝謝。這是一個項目列表,不能有任何默認值。但是,我不能將這種邏輯封裝在局部視圖中,這讓我感到困擾。如果我從十幾個視圖使用它,那麼我需要添加代碼以在十幾個位置提供列表。 –

1

您可以使用一個孩子的行動這一點。

在做一個控制器,僅設置ViewBag並返回組合框的局部視圖的操作。

例如

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

然後,需要使用下拉列表中的任何視圖使得它作爲一個孩子的行動。

例如

@{ Html.RenderAction("MyDropDown", "MyController"); }