ASP MVC 3在不同视图中使用不同的布局

时间:2011-02-20 19:11:18

标签: asp.net-mvc razor

我有一个ASP MVC应用程序,需要多种不同的布局。在ASP.NET Web Apps中,我刚刚制作了单独的母版页。我如何在ASP MVC 3中执行此操作?

到目前为止,我为每个需要的布局创建了一个单独的Layout.cshtml文件。

我尝试在视图中设置布局,但它正在从ViewStart.cshtml中被吹走,它将其设置回网站的默认布局。

另外,我似乎无法使用Razor进行智能感知,所以如果我可以有条件地设置布局,那么我无法探索我在ViewStart中可以做的很多事情。

思想?

3 个答案:

答案 0 :(得分:56)

您可以在控制器操作中动态设置布局:

public ActionResult Index()
{
    var viewModel = ...
    return View("Index", "_SomeSpecialLayout", viewModel);
}

答案 1 :(得分:16)

您可以通过在上面写@{ Layout = "~/.../Something.cshtml"; }来手动设置视图的布局。

编辑:您可以将布局名称作为参数传递给控制器​​中的View()方法。

答案 2 :(得分:2)

此方法是初学者在ASP.NET MVC应用程序中控制布局呈现的最简单方法。我们可以识别控制器并根据控制器渲染布局。为此,我们将代码写入Views文件夹根目录中的_ViewStart文件中。以下是如何完成的示例。

@{
  var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
  string cLayout = "~/Views/Shared/_Layout.cshtml";
  if (controller == "Webmaster") {
    cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
  }
  Layout = cLayout;
}

阅读完整文章我写了here - "如何在ASP.NET MVC中渲染不同的布局"。