没有控制器的_layoutPage.cshtml中的动态内容

时间:2014-09-19 05:53:39

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

我们正在尝试动态获取模板标题中的类别列表。 例如"短裤,牛仔裤,裤子等。"应出现在类别列表菜单下拉列表中。

正如我们所知,布局页面对于所有控制器都是全局的。因此,这是在不使用任何控制器的情况下实现此目的的最佳方式,因为我们知道任何控制器都不会调用布局页面而只是定义 在视图页面中。

3 个答案:

答案 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.易于维护。