将ViewData分配给嵌套的母版页

时间:2009-05-06 20:13:30

标签: asp.net-mvc master-pages nested

是否有一种将ViewData分配给嵌套母版页的好方法?例如,在我的顶级母版页中,我可能有登录用户的信息。当用户在任何部门页面上时,我还有一个嵌套的母版页。我希望这些数据仅在部门页面上提供。

所以这就是它的样子:

Top Level Master Page - Includes ViewData["userData"]
    |
    |
    ---> Nested Master Page - Includes ViewData["departmentalData"]

因此,每当我有一个使用嵌套母版页的视图时,它都会包含ViewData [“userData”]和ViewData [“departmentalData”]。但如果我只使用顶级母版页,那么我只有ViewData [“userData”]。这可能吗?

5 个答案:

答案 0 :(得分:1)

如果您坚持使用ViewData作为母版页的数据载体(而不是使用我可能会使用的MvcContrib项目中的Html.RenderAction(...))那么如果您可以识别嵌套在哪些情况下将使用masterpage,您可以设置ActionFilter将所需数据输入ViewData [“departmentalData”]。

答案 1 :(得分:0)

一种可能性是在ViewPage和ViewMasterPage上编写扩展方法以获取所需的数据。我不确定,但我认为这就是Rob Conery在他的Commerce.MVC包中所做的。看一看。

答案 2 :(得分:0)

我们遇到了同样的问题。到目前为止,我们为所有控制器提供了一个基类,并为生成ViewData提供了一个受保护的方法。我们从使用此特定母版页的所有操作中调用它。

我肯定会关注这个问题,看看别人有什么想法。

答案 3 :(得分:0)

MVC有一个子控制器的概念(我不确定它是否仍然存在并将在MVC框架中出现)。您可以在codeplex上的mvc contrib项目中找到它。 可以在这里找到一些描述或博客文章......

http://mhinze.com/subcontrollers-in-aspnet-mvc/

并将对象传递给该子控制器在这里讨论......

http://mhinze.com/passing-objects-to-subcontrollers/

这不是基于主页,但可以帮助你......

答案 4 :(得分:0)

只要您的控制器为要查看的页面设置正确的ViewData,那么无论使用多少母版页都无关紧要。或者我错过了什么?