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頁面。

相關問題