我们正在尝试动态获取模板标题中的类别列表。 例如"短裤,牛仔裤,裤子等。"应出现在类别列表菜单下拉列表中。
正如我们所知,布局页面对于所有控制器都是全局的。因此,这是在不使用任何控制器的情况下实现此目的的最佳方式,因为我们知道任何控制器都不会调用布局页面而只是定义 在视图页面中。
答案 0 :(得分:0)
您可以通过向控制器操作发出Ajax请求来动态获取布局页面上的列表,并从那里返回json并在布局页面上显示,或者您可以在Html的帮助下创建局部视图并在布局页面内呈现局部视图@Html.RenderAction()
或@Html.RenderPartial()
答案 1 :(得分:0)
虽然MVC框架会自动加载_Layout.cshtml
(以及任何其他布局/母版页),但并不意味着它不能使用ViewBag
。我建议创建一个BaseController
,所有控制器都会扩展。您可以将类别列表添加到ViewBag
内的BaseController
,这将使其在您的布局页面中可用。
public class BaseController : Controller
{
public BaseController()
{
ViewBag.Categories = GetAllCategories();
}
}
我知道你指明你不想要一个"控制器解决方案"但我相信你并不知道这实际上是可行的。事实上,拥有一个基本控制器可以为您的项目带来很多功能。您可以在BaseController
:数据,方法,控制器过滤器等内部设置控制器需要重用的所有内容。
ViewBag
方法已在框架中使用。我不记得MVC5模板的外观,但是如果你看一下MVC4模板,你会发现_Layout.cshtml
页面使用ViewBag
来设置标题。当前页面:<title>@ViewBag.Title - My ASP.NET MVC Application</title>
。
答案 2 :(得分:0)
我更愿意选择@ Html.RenderAction()。 原因: 1.最佳表现 2.您可以缓存此操作的数据。 3.易于维护。