代码之家  ›  专栏  ›  技术社区  ›  lahsrah

ViewModel中的最佳实践

  •  6
  • lahsrah  · 技术社区  · 15 年前

    在我的印象中,ViewModel应该代表已填写表单的一个实例,但我认为我可能错了,因为我看到其他人在ViewModel中放置列表之类的内容。

    把它放在某个静态类中,然后直接从视图中调用,这样不更好吗?

    2 回复  |  直到 15 年前
        1
  •  9
  •   Community Mohan Dere    9 年前

    当你意识到有很多方法可以实现你的目标。而 MVC design pattern 鼓励某些应用程序组织如何组织模型、视图和控制器最终取决于您的偏好。

    ASP.NET MVC drop down lists 在博客里。Scott使用扩展方法将复杂类型的可枚举项转换为 IEnumerable<SelectListItem> IEnumerable<选择列表项>

    这是对我所说的ViewModels和FormModels的合理描述。ViewModel将显示数据传送到视图,FormModel用于将收集的数据传送回控制器操作。进一步解释:

    • 视图模型包含有助于渲染视图的数据。通过以这种方式组织视图模型,我可以放置所有必要的信息,以便将特定视图呈现到关联模型中。这就避免了我不得不将ViewData用于任何不是真正临时的事情。
    • 表单模型用于收集用户输入。FormModels(几乎)从不包含对其他复杂类型的引用,它由原语、日期时间和字符串组成。

    never reuse a model for a different view . 使模型与用于渲染它们的视图紧密对齐可以使视图更易于编写。您不必担心静态方法之类的事情,因为您的模型应该以易于呈现的形式将数据传送到它们关联的视图。工具,如 AutoMapper 可以帮助将域对象“展平”到模型中以供显示。

    ASP.NET MVC terminology is tripping me up - why 'ViewModel'?

        2
  •  3
  •   RPM1984    15 年前

    无论视图需要什么数据,都可以将其放入ViewModel中。

    在我看来,一旦你的视图完成了渲染过程,它就应该拥有它绑定到的模型所需的所有信息。

    如果您开始使用helper方法,那么视图在某种意义上就是“返回控制器”。扩展/帮助程序方法适合格式化等, 但他们不应该通过模型调用

    别忘了,您还拥有ViewData(基本上是HttpContext.Current.Items,用于单个请求),这是一种轻量级存储机制,可用于跨部分视图共享数据(例如)。