我是ASP.NET MVC的新手,我有一个带有组合框的局部视图,我需要动态填充它。
我的理解是我可以将列表数据放在视图的ViewBag中,并且可以从我的局部视图中获取。
但是,我希望能够使用来自多个不同页面的局部视图。所有使用局部视图的页面是否必须使用列表数据填充ViewBag?有没有办法在我的局部视图中封装它?
答案 0 :(得分:1)
您应该使用
将数据传递到部分视图 @Html.Partial("", yourData)
并使用
在局部视图中访问它们 @ViewData.Model
答案 1 :(得分: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”必须是强类型的。
答案 2 :(得分:1)
您可以使用子操作。
在仅设置ViewBag的控制器中执行操作并返回组合框局部视图。
e.g。
[ChildActionOnly]
public ActionResult MyDropDown()
{
ViewBag.DropDown = blah;
return PartialView();
}
然后,任何需要使用该下拉列表的视图都会将其呈现为子操作。
e.g。
@{ Html.RenderAction("MyDropDown", "MyController"); }