【问题标题】:Populate List Data from Partial View从局部视图填充列表数据
【发布时间】:2012-12-08 05:55:24
【问题描述】:

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

我的理解是可以把列表数据放到视图的ViewBag中,从我的局部视图中就可以得到。

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

【问题讨论】:

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


    【解决方案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”必须是强类型的。

    【讨论】:

    • 我没用过,不过我想你也可以试试this
    【解决方案2】:

    您应该使用

    将数据传递给您的局部视图
        @Html.Partial("", yourData)
    

    并在您的局部视图中使用

        @ViewData.Model
    

    【讨论】:

    • 但是我会从哪里做呢?来自使用局部视图的每个页面?
    • 是的。当然,如果 ViewData.Model 为空,您可以定义“默认值”。但是,使用我的答案是正确的方法。
    • 谢谢。这是一个项目列表,不能有默认值。但是我无法将这个逻辑封装在局部视图中,这让我很困扰。如果我从十几个视图中使用它,那么我需要添加代码以在十几个地方提供列表。
    • 如果您始终拥有相同的数据,请考虑使用保存数据的静态类。您可以从您的部分访问它们而无需将其传递。它并不真正建议使用 ViewBag 。 ViewBag 是动态的。
    • 数据将来自数据库,并不总是相同的。但是,我可以将它包含在一个静态类中。谢谢。不过这里的结构让我有点困扰。
    【解决方案3】:

    您可以为此使用子操作。

    在只设置 ViewBag 并返回组合框部分视图的控制器中进行操作。

    例如

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

    然后,任何需要使用该下拉列表的视图都将其呈现为子操作。

    例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多