0

我有以下顶部的页面:如何将模型从剃须刀页面传递到其主页面/布局页面?

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

我想用AppMainModel及其属性在其主/页面布局。如果可能的话,强烈键入(例如,避免ViewData等)。

这可能吗?

+0

我假设你的意思是布局页面?只需在其中添加'@model AppMainModel',但目前还不清楚为什么要将布局页面绑定到模型 –

+0

@StephenMuecke是,布局页面。引导程序导航栏位于布局页面中,我需要它作为数据驱动。这就是原因。 – AngryHacker

+1

问题是您的布局现在只能被具有'@model AppMainModel'的视图使用。我怀疑你真正想要的是使用'@ Html.Action()'来调用一个返回导航栏的局部视图的方法 –

回答

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

0

您可以在布局页面上设置的@model还有:

@model AppMainModel 

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

但是,你必须确保你每次使用此布局你通过一个从AppMainModel继承的模型。

0

为了避免是非强类型的_layout页面上,我建议你看看下面的伟大@jgauffin博客文章Getting information into the Layout without using ViewBag.

使用在总结一LayoutViewModel:

  • 用你的_Layout页面创建一个你需要的所有类型/字段的视图模型
  • 把这个LayoutViewModel包装成一个BaseController类(你的其他控件ERS继承)覆盖其OnResultExecuting()方法
  • 创建Viewbase布局类将继承WebViewPage,并在web.config注册,使其能够使用Viewbase布局模型作为pageBaseType

举个例子:我用这个方法来传递元字段值到我的_Layout页面。

相关问题