如何将模型从剃刀页面传递到其主/布局页面?

时间:2015-11-13 21:58:19

标签: asp.net-mvc dependency-injection asp.net-core asp.net-core-mvc

我有一个页面,其中包含以下内容:

@model AppMainModel
@{
    ViewData["Title"] = "Home Page";
}

我想在其主/布局页面中使用AppMainModel及其属性。尽可能强类型化(例如,避免使用ViewData等)。

这可能吗?

3 个答案:

答案 0 :(得分:0)

ViewModel数据可用于布局页面。如果您希望在布局页面中强类型,则可以考虑使用包含公共数据的页面viewmodel类。如果没有,只需使用ViewData的动态特性传递常见的东西。如果合适,您甚至可以应用全局过滤器来设置公共数据。 Solution From here

您也可以尝试此解决方案: http://forums.asp.net/t/1799746.aspx?How+to+pass+a+value+to+the+LoginDisplay+from+HomeController+that+will+display+on+all+pages

答案 1 :(得分:0)

您也可以在布局页面上设置@model

@model AppMainModel

<html>
<head>
   <title>@Model.Title</title>
</head>
...
</html>

但是,您必须确保每次使用此布局时都传递一个继承自AppMainModel的模型。

答案 2 :(得分:0)

为避免在_Layout页面上进行非强类型输入,建议您查看以下关于Getting information into the Layout without using ViewBag.

的精彩@ jgauffin 博客文章

在摘要中使用LayoutViewModel:

  • 使用_Layout页面上所需的所有类型/字段创建一个viewmodel
  • 将此LayoutViewModel的处理包装到BaseController类(您的其他控制器继承)覆盖其OnResultExecuting()方法
  • 创建一个将继承WebViewPage的Viewbase布局类,并在web.config中注册以将您的Viewbase布局模型用作pageBaseType

一个例子:我使用这种方法将元字段值传递给我的_Layout页面。