【问题标题】:Data annotations not detected when views are based on view models (and not models entities)当视图基于视图模型(而不是模型实体)时未检测到数据注释
【发布时间】:2011-11-09 11:17:18
【问题描述】:

为了尊重视图模型模式,我重构了我的代码。我还使用了 AutoMapper。现在,我有一个与“必需”和“显示名称”注释相关的问题。最初我在模型上设置了这些注释。我认为这是最好的地方。但是现在我在我的视图上使用了 viewModel 我想知道

我是否必须将“DisplayName”和“Required”注释从我的模型移动到我的视图模型类?

我注意到我的模型上的注释不再在我的视图中检测到(现在基于视图模型)。

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    简短的回答,是的。

    反射用于模型的类型(在视图中声明)以确定需要为各自的标记赋予哪些属性。

    【讨论】:

    • Bartosz:好的,所以如果我根据用户信息有 3 个不同的视图,我会复制一些“必需”注释,对吗?我们总是说“不要重复”,但在这种情况下我们别无选择?
    • 如果它们是通用属性,您可以使用这些属性和属性创建一个基类并将它们子类化。但是,如果您要求完全相同的信息,则视图可以共享相同的视图模型类型。 MVVM 模式的重点是将视图与域模型分离,它不一定需要每个视图都有一个视图模型。
    • 好吧,不管有没有 DRY('不要重复自己'),也有那个 '单一责任' 的东西。具有视图注释的域模型是 DRY,但会破坏 SR。总是由你来找到最佳位置:)
    • 视图模型不一定是域模型对象的重复......它们是视图状态的抽象。
    【解决方案2】:

    是的,事实上,注释是拥有视图模型的原因之一,因为这样您就不必用仅在特定视图中有意义的注释污染域类。

    将所有东西都放在一个地方是很诱人的,要真正干燥,但域模型可能对你的视图中发生的任何事情都不感兴趣。这不是他的责任。 不要重复自己单一责任之间的斗争很常见,你必须找到他们之间的甜蜜点:)

    【讨论】:

      猜你喜欢
      • 2011-05-26
      • 2023-02-14
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多