繁体   English   中英

如何在运行时替换当前布局?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM