【问题标题】:Pass data to Master Page with ASP.NET MVC使用 ASP.NET MVC 将数据传递到母版页
【发布时间】:2010-04-08 00:32:11
【问题描述】:

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

注意:我知道这违反了纯 ASP.NET MVC,但就像我说的,它是一个混合项目。我在项目中引入 ASP.NET MVC 的主要目的是仅在某些情况下更好地控制我的 UI。

【问题讨论】:

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


    【解决方案1】:

    将您的字符串放入 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

    【讨论】:

      【解决方案2】:

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

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

      我倾向于将 ViewData 用于来自控制器的临时值,例如选择列表和用于无关事物(例如主站点导航)的 RenderAction。

      【讨论】:

        猜你喜欢
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多