在Controller方法中获取布局名称
本文关键字:布局 获取 Controller 方法 | 更新日期: 2023-09-27 18:27:46
我正在使用MVC 5,并希望在我的MVC控制器中覆盖下面的View方法
protected internal virtual ViewResult View(string viewName, string masterName, object model)
我可以有许多不同的布局视图,因此希望在运行时获得当前布局名称,并将其传递给overriden视图方法。如何在运行时在控制器中获取布局名称?
编辑我认为我不需要为我需要做的事情创建一个自定义视图引擎。我基本上只想在多个方法和控制器之间设置一个ViewBag值,不想重复我自己。我在运行时有viewName和model值,只是没有布局名称作为masterName参数传递
protected override ViewResult View(string viewName, string masterName, object model)
{
ViewBag.SomeValue = GetValue();
return base.View(viewName, masterName, model);
}
您在运行时使用什么来做出决策会告诉你用哪个大师吗???也许你可以做一个Switch?
Switch (loggedInUser.SomeSpecialValue)
{
Case: "value1":
return "_Layout1.cshtml";
}
您还打算如何决定显示哪种布局?
编辑:好的,扩展上面的想法-也许这样的东西可以帮助你:
RouteConfig
routes.MapRoute(
name: "Default",
url: "{layout}/{controller}/{action}/{id}",
defaults: new { layout = "default", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
家庭控制器
protected override ViewResult View(string viewName, string masterName, object model)
{
var layout = RouteData.Values["layout"].ToString();
switch (layout)
{
case "default":
return base.View(viewName, "_layout", model);
case "test":
return base.View(viewName, "_layout2", model);
}
return base.View(viewName, masterName, model);
}
视图根据需要创建布局视图,并将它们添加到共享文件夹和switch语句中。
测试URL的
http://localhost:64372/ -> Default Layout
http://localhost:64372/default/home/index
http://localhost:64372/test/ -> 2nd Layout
http://localhost:64372/test/home/index
希望这对你有用??