asp.net-mvc - 将上下文信息传递给 ASP.NET MVC 中的 View

标签 asp.net-mvc viewmodel

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

考虑以下场景。

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

为了满足这些要求,我计划开发一个 javascript 片段来隐藏客户端上的当前语言选项卡。为此,我需要客户端上的当前语言选项卡 ID。因此,我需要某种方式将 Id 传递给母版页(以便将其“融合”到 js 脚本中)。

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

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

有任何想法吗?

最佳答案

如果所有 View 都需要此上下文信息,那么拥有基本 View 模型似乎是一个很好的解决方案。问题是在哪里填充此信息以避免困惑所有 Controller 操作。 custom action filter似乎是个好地方。在 OnActionExecuted方法,您可以获得 Controller 操作返回的 View 模型,并填充上下文部分(如果它派生自基本类型)。

另一种选择是将上下文信息放入 ViewData (强类型 View 也可以使用 ViewData)但我个人讨厌在我的 View 中使用魔法字符串和进行强制转换(这可以通过使用处理此 ViewData 的 HTML 助手来克服)。

关于asp.net-mvc - 将上下文信息传递给 ASP.NET MVC 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2902628/

相关文章:

c# - Application_Error 在本地主机上呈现页面,但不在生产 (www) 上呈现页面

c# - 我如何根据一天中的时间或访问者的设备等规则更改 Orchard CMS 中站点的主页?

css - 在移动设备上查看时如何强制网站处于横向模式?

c# - 将参数传递给索引 View

c# - MVC - 设置 SelectList 的选定值

c# - AutoMapper:为什么 UseValue 只执行一次

android - 在 View 模型之间传递数据 MvvmCross

xaml - MVVM - 从 ViewModel 调用后台代码中的 UI 逻辑

android - 使用 Hilt 将 ViewModel 注入(inject) ViewModel

asp.net - 如何为 View 模型添加自定义验证方法