Asp.net mvc 从局部视图填充列表数据
我是ASP.NET MVC新手,我有一个带有组合框的局部视图,需要动态填充 我的理解是,我可以将列表数据放在视图的ViewBag中,并且可以从我的局部视图中使用它Asp.net mvc 从局部视图填充列表数据,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我是ASP.NET MVC新手,我有一个带有组合框的局部视图,需要动态填充 我的理解是,我可以将列表数据放在视图的ViewBag中,并且可以从我的局部视图中使用它 但是,我希望能够从几个不同的页面使用部分视图。所有使用局部视图的页面都必须使用列表数据填充ViewBag吗?有没有办法将其封装到我的局部视图中?您应该使用 @Html.Partial("", yourData) 并在局部视图中使用 @ViewData.Model 看看这个问题:。可能您应该创建一个包含列表数据的基本
但是,我希望能够从几个不同的页面使用部分视图。所有使用局部视图的页面都必须使用列表数据填充ViewBag吗?有没有办法将其封装到我的局部视图中?您应该使用
@Html.Partial("", yourData)
并在局部视图中使用
@ViewData.Model
看看这个问题:。可能您应该创建一个包含列表数据的基本视图模型,并(如果需要)从中继承其他视图模型
例如:
class ViewModelWithFooList
{
public List<Foo> FooList
{
get { return new List<Foo>() { new Foo("one"), new Foo("two"), new Foo("three") }; }
}
}
在你看来:
@Html.RenderPartial("FooList", Model.FooList);
视图和部分视图“傻瓜”必须为强类型。您可以使用子操作来实现此目的 在控制器中执行一个操作,该操作仅设置ViewBag并返回组合框部分视图 e、 g 然后,任何需要使用该下拉列表的视图都会将其作为子操作呈现 e、 g
但我从哪里做这件事呢?从每个使用局部视图的页面?是。当然,如果ViewData.Model为空,您可以定义“默认值”。但是,用我的答案,是正确的方法。谢谢。这是一个项目列表,不能有默认值。但我感到困扰的是,我不能将这种逻辑封装在局部视图中。如果我从十几个视图中使用它,那么我需要添加代码来提供十二个地方的列表。如果总是有相同的数据,请考虑使用保存数据的静态类。您可以从您的partial中访问它们,而无需将其传入。因此,不建议使用ViewBag。ViewBag是动态的。数据将来自数据库,但并不总是相同的。但是,我可以在这里将其包含在一个静态类中。谢谢这里的结构让我有点困扰。我从来没有用过,但我想你也可以试试。
@Html.RenderPartial("FooList", Model.FooList);
[ChildActionOnly]
public ActionResult MyDropDown()
{
ViewBag.DropDown = blah;
return PartialView();
}
@{ Html.RenderAction("MyDropDown", "MyController"); }