Asp.net mvc 3 在MVC 3中动态更改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文件中进行更改,或者在这种情况下是否有其他解决方案 感谢您的帮助:)您的问题没有足够的信息提供完整的代码示例 但基本上你能

在我的MVC项目中有两个区域,分别是管理员和客户端,我需要为客户端动态配置布局,在_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";
}