【发布时间】:2012-12-08 05:55:24
【问题描述】:
我是 ASP.NET MVC 的新手,我有一个带有组合框的局部视图,我需要动态填充它。
我的理解是可以把列表数据放到视图的ViewBag中,从我的局部视图中就可以得到。
但是,我希望能够使用来自多个不同页面的局部视图。所有使用局部视图的页面都必须使用列表数据填充 ViewBag 吗?有什么办法可以将它封装在我的局部视图中?
【问题讨论】:
我是 ASP.NET MVC 的新手,我有一个带有组合框的局部视图,我需要动态填充它。
我的理解是可以把列表数据放到视图的ViewBag中,从我的局部视图中就可以得到。
但是,我希望能够使用来自多个不同页面的局部视图。所有使用局部视图的页面都必须使用列表数据填充 ViewBag 吗?有什么办法可以将它封装在我的局部视图中?
【问题讨论】:
看这个问题: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”必须是强类型的。
【讨论】:
您应该使用
将数据传递给您的局部视图 @Html.Partial("", yourData)
并在您的局部视图中使用
@ViewData.Model
【讨论】:
您可以为此使用子操作。
在只设置 ViewBag 并返回组合框部分视图的控制器中进行操作。
例如
[ChildActionOnly]
public ActionResult MyDropDown()
{
ViewBag.DropDown = blah;
return PartialView();
}
然后,任何需要使用该下拉列表的视图都将其呈现为子操作。
例如
@{ Html.RenderAction("MyDropDown", "MyController"); }
【讨论】: