[英]How to replace current layout at runtime?
我有一个小应用程序(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>
我该怎么做? 谢谢!
我假设您要替换布局时正在调用新的控制器动作。 如果是这样,则可以使用以下方法之一;
首先,您可以将_ViewStart.cshtml
文件放在\\Views\\
文件夹中,以覆盖默认布局,如下所示。
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
在这里,您可以在\\Views\\User
添加另一个_ViewStart.cshtml
文件,以覆盖所有\\User\\
视图的默认布局。
@{
Layout = "~/Views/Shared/_UserLayout.cshtml";
}
您也可以在视图中指定上述内容,例如\\Views\\User\\Index.cshtml
。
@{
Layout = "~/Views/Shared/_UserIndexLayout.cshtml";
}
或者,您可以在控制器中返回视图时指定布局。
return View("Index", "~/Views/Shared/_UserLayout.cshtml", someViewModel);
如果您不想覆盖_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();
}
有关更多信息,请检查此答案以指定其他布局
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.