2011-12-15 66 views
0

我正在研究ASP.NET MVC 3應用程序,但我對MVC一般來說不太熟悉。ASP.NET MVC 3 - 將數據傳遞到佈局中的局部視圖

我在我的應用程序佈局視圖中需要傳遞數據的部分視圖。這將出現在每一頁上。有沒有辦法做到這一點,所以我不必將整個網站中的每個操作都加載到視圖模型中?

如同,如果用戶導航到Mysite/admin/settings,我希望佈局的局部視圖能夠以某種方式接收它需要的數據,而無需將該代碼放置在Settings動作中在管理員控制檯中。

在這個相同的說明中,您如何將數據傳遞給應用程序的佈局視圖呢?

+0

可能的重複[如何將數據傳遞到我的佈局中的PartialView?](http://stackoverflow.com/questions/7607950/how-to-pass-data-to-a-partialview-in-my-佈局) – jrummell 2011-12-15 19:51:16

回答

1

在這種情況下,我通常使用基本視圖模型對我的看法

public class ApplicationViewModel 
{ 
    public string UserName {get; set;} 
    .... 
} 

public class SettingsViewModel : ApplicationViewModel 
{ 
} 

所有你的看法會從該視圖模型繼承。你的佈局會想到它,以及

_layout.cshtml:

@model ApplicationViewModel 
.... 

<h1>hello @Model.UserName</h1> 

希望這回答你的問題

+0

對不起 - 這篇文章http://stackoverflow.com/questions/4154407/asp-net-mvc-razor-pass-model-to-layout尖叫,分配模型到基本視圖是一個壞主意。就像一個更有經驗的同事一樣。Downvoting – 2014-04-02 08:11:29

1

部分僅呈現視圖。您需要手動提供模型。

您可以爲所需的視圖創建一個動作並使用Html.Action(actionName)進行渲染。


使例如menu的動作,這將創建將被提供給menu視圖的模型。

現在您可以從任何地方撥打@Html.Action("menu"),它將自動呈現。 (你可以ofcourse提供控制器名稱,以及,甚至是自定義的RouteData

你也可能需要設置Layout = null;在視圖中避免使用整個網站的總體佈局。

+0

您可以請擴展此。這似乎有可能是一個很好的解決方案,但我沒有足夠的資源繼續從你的帖子開始。你能分享一些例子,或者可以鏈接到例子嗎?謝謝。 – jdavis 2011-12-15 19:52:47

0

我這是怎麼傳值的局部視圖從我的佈局頁:

佈局頁面代碼:

Html.RenderPartial("_SubMenuLeft", new ViewDataDictionary { {"category", "MMG"} }); 

和我的_SubMenuLeft.cshtml(局部視圖)

@if (ViewData["category"] == "MMG") 
{ 
    ... 
} 

希望它可以幫助某人以備將來參考。

相關問題