【问题标题】:ASP.NET MVC 3 - pass data to a partial view in LayoutASP.NET MVC 3 - 将数据传递到布局中的部分视图
【发布时间】:2014-04-07 07:42:52
【问题描述】:

我正在开发一个 ASP.NET MVC 3 应用程序,但总的来说我对 MVC 比较陌生。

我的应用程序布局视图中有一个局部视图,需要将数据传递给它。这将出现在每一页上。有没有办法实现这一点,这样我就不必为整个站点中的每个操作将该数据加载到视图模型中?

如果用户导航到 Mysite/admin/settings,我希望布局上的部分视图能够以某种方式接收它需要的数据,而无需我将该代码放入 Settings 操作中管理员控制器。

同样,如何将数据传递给应用程序的布局视图?

【问题讨论】:

标签: asp.net-mvc-3


【解决方案1】:

在这些情况下,我通常为我的视图使用基本 ViewModel

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

public class SettingsViewModel : ApplicationViewModel
{
}

您的所有视图都将从该 ViewModel 继承。你的布局也会期待它

_layout.cshtml:

@model ApplicationViewModel
....

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

希望这能回答你的问题

【讨论】:

  • 抱歉 - 这篇帖子 stackoverflow.com/questions/4154407/… 尖叫着将模型分配给基本视图是一个坏主意。一位更有经验的同事也是如此。否决
  • @CrabBucket 它确实增加了一个限制,您必须为使用相同布局的所有视图继承ApplicationViewModel。如果这是您无法忍受的限制,那么这不是您可以使用的解决方案,就这么简单。我们一直在权衡。作为一名经验丰富的程序员,您需要知道何时评估每种情况并决定哪些有效,哪些无效。你生活,你学习:)
【解决方案2】:

部分只渲染一个视图。您需要手动提供模型。

您可以为您想要的视图创建一个动作并使用Html.Action( actionName ) 呈现它。


进行一个操作,例如menu,它将创建一个模型,该模型将提供给menu 视图。

现在您可以从任何地方调用@Html.Action("menu"),它将自动呈现。 (您当然也可以提供控制器名称,甚至自定义 routeData

您可能还想在视图中设置Layout = null; 以避免使用整个站点的主布局。

【讨论】:

  • 能否请您扩展一下。这似乎是一个很好的解决方案,但我没有足够的内容继续你的帖子。您能否分享一些示例或示例链接?谢谢。
【解决方案3】:

这就是我从布局页面向局部视图传递值的方式:

布局页面代码:

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

在我的_SubMenuLeft.cshtml(部分视图)

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

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

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2013-07-14
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多