2016-12-23 38 views
1

我繼續讀了MVC方式從控制器到視圖通過視圖模型完成傳遞數據,但如何將數據傳遞到_Layout.cshtml,如網頁標題,meta描述,文章作者,等等Asp.net MVC方式將數據傳遞給_layout.cshtml?

什麼是通過這種數據的MVC方式?我應該只使用ViewBag嗎?

+0

的可能的複製[將數據傳遞給佈局通用於所有頁面(HTTP:/ /stackoverflow.com/questions/13225315/pass-data-to-layout-that-are-common-to-all-p年齡) – DavidG

+2

您可以使用ViewBag作爲頁面標題,是的。您也可以創建一個模型屬性並將您的Layout.cshtml文件綁定到該視圖模型。你也可以使用會話數據。你在這裏有很多選擇 – mituw16

+0

ViewBag是最簡單的。但是你也可以使用[Child Action](http://stackoverflow.com/questions/12530016/what-is-an-mvc-child-action)。 – Jasen

回答

2

你有幾種方法:


ViewBag查看數據非常容易使用,但並不總是方便。

還有一個很大的優點 - 您可以在一個地方設置/閱讀並在另一個地方閱讀 - 例如,您可以將它們設置在主視圖中,並在_lauout.cshtml中閱讀/顯示它們。


View組件在MVC核心(在我看來),它允許你創建UI部件中最有趣的新功能。

沒有爲ViewComponent多一點點的編碼(您需要創建控制器和視圖),但它的靈活的功能(我喜歡),並容易在你需要它的地方打電話,只是

@await Component.InvokeAsync("NameOfCOmponent")


注射不是我喜歡的,但有時usfull - 例如,如果你想顯示的用戶名,你可以只把下面的代碼,直接到你的佈局/視圖文件:

@using System.Security.Claims 
@using Microsoft.AspNetCore.Identity 
@inject UserManager<ApplicationUser> userManager 
@{ 
    var userInfo = ((await userManager?.GetUserAsync(User))?.xxx); 
    // where 'xxx' is any property of ApplicationUser model 
} 

那麼你可以在同一視圖中使用@userInfo來顯示該信息。


更多信息:

相關問題