使用ASP.NET MVC将数据传递到母版页

时间:2010-04-07 15:04:34

标签: asp.net-mvc user-controls master-pages strongly-typed-view

我有一个混合的ASP.NET WebForms / MVC项目。在我的母版页中,我有一个“菜单”用户控件和一个“页脚”用户控件。无论如何。我需要将一些数据(2个字符串)传递到主页面上的“菜单”用户控件(以选择菜单导航中的当前选项卡等)。我的视图是强类型的数据模型。如何将数据从控制器推送到菜单或至少允许我的母版页访问控制器中预定义的某些数据?

注意:我理解这违反了纯ASP.NET MVC,但就像我说的那样,它是一个混合项目。我将ASP.NET MVC引入我的项目的主要目的是在某些情况下对我的UI进行更多控制。

2 个答案:

答案 0 :(得分:2)

将您的字符串放入ViewData集合

ViewData["MenuString1"] = "My First String";
ViewData["MenuString2"] = "My Second String";

并在主页面中检索它们:

myMenu.Property1 = ViewData["MenuString1"].ToString();
myMenu.Property2 = ViewData["MenuString2"].ToString();

http://nerddinnerbook.s3.amazonaws.com/Part6.htm

答案 1 :(得分:1)

您可以使用ViewData在Controller和View之间共享不在模型中的数据。在Controller中,执行ViewData["menu"] = myMenu;之类的操作,然后在视图中执行<%= ViewData["menu"] %>。您可以传递对象,但需要将ViewData [key]强制转换回View中的对象类型。

另一种方法是将菜单和其他非模型相关数据需求放入单独的控制器中。然后,您可以使用RenderAction调用生成菜单的导航控制器中的操作。 Hack has a blog post on RenderAction that explains this in more detail.

我倾向于使用ViewData来获取控制器中的临时值,例如选择列表和RenderAction用于不相关的事物,例如主站点导航。