2

此示例中的“查找”是IList<string>州的缩写。通常,您的域模型 POCO 不会包含这些选项。ViewModels 通常负责引用原始域模型和查找对象,但是当域模型嵌套并且您使用 MVC 模板时会发生什么(它无法访问原始模型的根属性?

有没有办法将查找包含在一个对象中,并将模型包含在模板的不同对象中?是否允许在视图中即时组装特定于该模板的 ViewModel(必须包含来自那里的任何嵌套数据)?我认为下拉查找值的静态方法很糟糕。

有任何想法吗?

注释(据我所知):

来自存储库的域模型 POCO 的结构不会改变。例如,如果您需要一个模型来同时拥有 Customer 对象和美国州的 DDL 选项,您通常有一个 ViewModel 引用 Customer 对象和 Customer Lookup 列表。

但是,当您有一个嵌套的域模型(聚合根)时,嵌套对象没有放置查找列表的位置,并且 MVC 模板无法访问根级别的视图模型(它们的视图模型是部分模型)。

编辑:

有没有办法将 DDL 列表放在 ViewModel 的根级别,然后当您到达 Customer 对象时,构造一个引用根级别 DDL 列表和当前 Customer 对象的新 ViewModel 发送到模板?这将消除模型中的重复数据,并为所有视图使用单个模型。唯一不好的是您视图中的控制器之类的数据汇编代码(这同样糟糕)。

4

2 回答 2

3

几个建议。首先,为您的视图使用单独的视图模型——不要直接使用您的域模型。这些视图模型可以而且应该携带视图所需的额外数据。其次,您可以使用DisplayFor / EditorFor的重载将额外的视图数据传递给模板。这样,您的模板可以特定于特定的域模型,并且可以访问视图模型中的其他数据。

于 2010-08-24T18:49:59.920 回答
1

对于像状态缩写这样的静态、不变的列表,您可以使用应用程序状态或缓存条目。这些类型的列表可以从数据库加载到 Application_Start 中。

于 2010-08-24T18:45:38.933 回答