我有一个小应用程序(asp.net mvc)。 我有一个问题:在我的项目中我有一个布局 - _layout.chtml, 是否可以用从文件中注入的不同内容替换内容?
例如: 当前_layout.chtml:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@RenderBody()
</body>
</html>
现在,我想从文件中加载新内容,并将当前的_layout替换为新内容,如下所示:
<!DOCTYPE html>
<html>
<head>
<title>My Title</title>
<link href="~/css/mycss.css" rel="stylesheet" />
</head>
<body>
@RenderPage("../Shared/_Header2.cshtml")
@RenderBody()
@RenderPage("../Shared/_Footer2.cshtml")
<script src="~/scripts/jquery.js"></script>
<script src="~/scripts/angular.js"></script>
@RenderSection("scripts", required: false)
</body>
</html>
我该怎么做? 谢谢!
答案 0 :(得分:1)
如果您不想以其他方式覆盖_ViewStart.cshtml
return View ("NameOfView",masterName:"viewName");
或者 将您的布局存储在viewData中,如
//in controller
ViewData["Layout"]="your layout path";
//in _ViewStart.cshtml
Layout = ViewData["Layout"];
或者您可以创建自定义属性并在其中设置您的布局名称,如
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
有关详细信息,请查看此答案specify different Layouts
答案 1 :(得分:0)
我假设您在要替换布局时调用新的控制器操作。如果是这样,那么以下其中一个就可以做到这一点;
首先,您可以在_ViewStart.cshtml
文件夹中放置\Views\
文件,以覆盖默认布局,如下所示。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
在此处,您可以在_ViewStart.cshtml
中添加另一个\Views\User
文件,以覆盖所有\User\
次观看的默认布局。
@{
Layout = "~/Views/Shared/_UserLayout.cshtml";
}
您还可以在视图中指定上述内容,例如为\Views\User\Index.cshtml
。
@{
Layout = "~/Views/Shared/_UserIndexLayout.cshtml";
}
或者您可以在控制器中返回视图时指定布局;
return View("Index", "~/Views/Shared/_UserLayout.cshtml", someViewModel);