此示例中的“查找”是 IList<string>
状态缩写。通常,您的域模型 POCO 不会包含这些选项。 ViewModel 通常承担引用原始域模型和 Lookup 对象的责任,但是当域模型嵌套并且您使用 MVC 模板(无法访问原始模型的根属性?)时会发生什么?
有没有一种方法可以将查找包含在一个对象中,将模型包含在模板的不同对象中?是否允许在 View 中即时组装特定于该模板的 ViewModel(必须包含其中的任何嵌套数据)?我认为下拉查找值的静态方法不好。
有什么想法吗?
注释(据我所知):
来自存储库的域模型 POCO 的结构不会改变。例如,如果您需要一个模型同时具有客户对象和美国各州的 DDL 选项,那么您通常有一个引用客户对象和客户查找列表的 ViewModel。
但是,当您有嵌套的域模型(聚合根)时,嵌套对象没有地方放置查找列表,并且 MVC 模板无法访问根级别 View 模型(它们的 View 模型是部分模型)。
编辑:
是否有某种方法可以将 DDL 列表放在 ViewModel 的根级别中,然后当您到达 Customer 对象时,构造一个引用根级别 DDL 列表和当前 Customer 对象以发送到模板的新 ViewModel ?这将消除模型中的重复数据,并为所有 View 使用单个模型。唯一的缺点是您认为 Controller 类似数据汇编代码(这同样糟糕)。
最佳答案
一些建议。首先,为您的 View 使用单独的 View 模型——不要直接使用您的域模型。这些 View 模型可以而且应该携带 View 所需的额外数据。其次,您可以使用 DisplayFor 上的重载/EditorFor将附加 View 数据传递给模板。这样您的模板就可以特定于特定的域模型,但仍可以访问 View 模型中的附加数据。
关于asp.net-mvc-2 - ASP.NET MVC 2 : Any way to pass two Objects to a Template?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559872/