将上下文信息传递给ASP.NET MVC中的视图

时间:2010-05-25 07:01:42

标签: asp.net-mvc viewmodel

我想知道 - 向视图(或母版页)提供上下文(即与任何特定视图无关,但与所有视图无关)信息的最佳方式是什么?

请考虑以下情况。

假设我们有一个支持多种UI语言的应用。用户可以通过UI的小部件切换它们(类似于页面顶部的选项卡)。每种语言都呈现为单独的选项卡。不应呈现当前语言的标签。

为了满足这些要求,我打算使用一个javascript片段来隐藏客户端上当前的语言选项卡。为此,我需要在客户端上使用当前的语言选项卡ID。所以,我需要一些方法将Id传递给母版页(因为它被'融合'到js脚本中)。

我能想到的最好的事情是我的所有ViewModel都应该继承一些ViewModeBase,它有一个字段来保存当前语言标签Id。然后,无论我正在呈现什么视图,此ID都将始终可用于母版页的隐藏脚本。

但是,我担心这个ViewModelBase可能会以不受控制的方式增长,因为这些上下文信息(如当前语言)的数量会增长。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果所有视图都需要此上下文信息,那么拥有基本视图模型似乎是一个很好的解决方案。问题是在哪里填充此信息以避免混乱所有控制器操作。 custom action filter似乎是一个好地方。在OnActionExecuted方法中,您可以获取控制器操作返回的视图模型,并填充上下文部分(如果它来自基类型)。

另一种选择是将上下文信息放入ViewData(强类型视图也可以使用ViewData),但我个人不喜欢使用魔术字符串并在我的视图中进行转换(这可以通过使用HTML帮助程序来克服将处理此ViewData)。

答案 1 :(得分:0)

如果您认为ViewModeBase会增长很多,您也可以让viewmodel实现一个接口。

“视图”或“部分”可以具有该接口的类型。 如果只有一些页面具有那种功能,那就特别有用。