我想知道 - 向视图(或母版页)提供上下文(即与任何特定视图无关,但与所有视图无关)信息的最佳方式是什么?
请考虑以下情况。
假设我们有一个支持多种UI语言的应用。用户可以通过UI的小部件切换它们(类似于页面顶部的选项卡)。每种语言都呈现为单独的选项卡。不应呈现当前语言的标签。
为了满足这些要求,我打算使用一个javascript片段来隐藏客户端上当前的语言选项卡。为此,我需要在客户端上使用当前的语言选项卡ID。所以,我需要一些方法将Id传递给母版页(因为它被'融合'到js脚本中)。
我能想到的最好的事情是我的所有ViewModel都应该继承一些ViewModeBase,它有一个字段来保存当前语言标签Id。然后,无论我正在呈现什么视图,此ID都将始终可用于母版页的隐藏脚本。
但是,我担心这个ViewModelBase可能会以不受控制的方式增长,因为这些上下文信息(如当前语言)的数量会增长。
有什么想法吗?
答案 0 :(得分:1)
如果所有视图都需要此上下文信息,那么拥有基本视图模型似乎是一个很好的解决方案。问题是在哪里填充此信息以避免混乱所有控制器操作。 custom action filter似乎是一个好地方。在OnActionExecuted方法中,您可以获取控制器操作返回的视图模型,并填充上下文部分(如果它来自基类型)。
另一种选择是将上下文信息放入ViewData
(强类型视图也可以使用ViewData),但我个人不喜欢使用魔术字符串并在我的视图中进行转换(这可以通过使用HTML帮助程序来克服将处理此ViewData)。
答案 1 :(得分:0)
如果您认为ViewModeBase会增长很多,您也可以让viewmodel实现一个接口。
“视图”或“部分”可以具有该接口的类型。 如果只有一些页面具有那种功能,那就特别有用。