2011-12-15 67 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") 
{ 
    ... 
} 

希望它可以帮助某人以备将来参考。

相关问题