从部分视图填充列表数据

时间:2011-10-24 17:56:22

标签: asp.net-mvc asp.net-mvc-3

我是ASP.NET MVC的新手,我有一个带有组合框的局部视图,我需要动态填充它。

我的理解是我可以将列表数据放在视图的ViewBag中,并且可以从我的局部视图中获取。

但是,我希望能够使用来自多个不同页面的局部视图。所有使用局部视图的页面是否必须使用列表数据填充ViewBag?有没有办法在我的局部视图中封装它?

3 个答案:

答案 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"); }