Asp.net mvc 3 在MVC 3中动态更改ViewStart布局路径
在我的MVC项目中有两个区域,分别是管理员和客户端,我需要为客户端动态配置布局,在_ViewStart(在客户端)文件中将为所有客户端页面设置布局Asp.net mvc 3 在MVC 3中动态更改ViewStart布局路径,asp.net-mvc-3,model-view-controller,Asp.net Mvc 3,Model View Controller,在我的MVC项目中有两个区域,分别是管理员和客户端,我需要为客户端动态配置布局,在_ViewStart(在客户端)文件中将为所有客户端页面设置布局 Layout = "~/Views/Shared/_Layout.cshtml"; 所以,如果我们需要更改客户端布局,我们可以在_viewstartfile中更改cshtml文件的布局路径,对吗?我找不到如何在ViewStart文件中进行更改,或者在这种情况下是否有其他解决方案 感谢您的帮助:)您的问题没有足够的信息提供完整的代码示例 但基本上你能
Layout = "~/Views/Shared/_Layout.cshtml";
所以,如果我们需要更改客户端布局,我们可以在_viewstartfile中更改cshtml文件的布局路径,对吗?我找不到如何在ViewStart文件中进行更改,或者在这种情况下是否有其他解决方案
感谢您的帮助:)您的问题没有足够的信息提供完整的代码示例 但基本上你能做到
if (InsertIsAdminLogicHere) {
Layout = "~/Views/Shared/_AdminLayout.cshtml";
} else {
Layout = "~/Views/Shared/_Layout.cshtml";
}
如果你告诉我们你如何决定是否管理,我们可以提供更多的帮助
希望这有帮助记住
@{…}
中的任何内容都被视为代码。因此,只需在其中放置一个条件,即可改变其继承方式:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
if (User.Current.IsAuthenticated) {
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
}
虽然你最好看一下主题(并且有一个管理员/用户主题)。或者,您可以使\u Layout.cshtml
更智能,并让它根据条件处理不同的视图
另请参见:您可以利用嵌套布局。创建一个基本控制器并从此控制器驱动所有控制器
public class ControllerBase : Controller
{
public ControllerBase()
{
ViewBag.Theme = "~/Views/Shared/Default/Views/_Layout.cshtml";
}
}
public class HomeController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}
_ViewStart.cshtml(不在此文件中进行任何更改)
视图/Shared/_Layout.cshtml
这是Asp.NET Mvc的默认布局文件。清空此字段并更换这些行
@{
Layout = ViewBag.Theme;
}
@RenderBody()
您可以通过这种方式修改区域。您可以从数据库或任何您想要的地方获取BaseController中的活动模板信息
顺便说一句,如果您想将视图放在~/views文件夹之外,请在views/\u ViewStart.cshtml中搜索miablerazorviewengine
@{
object multiTenant;
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant))
{
throw new ApplicationException("Could not find tenant");
}
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml";
}
@{
object multiTenant;
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant))
{
throw new ApplicationException("Could not find tenant");
}
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml";
}