【问题标题】:MVC3 more strongly typed Model ClassMVC3 更强类型的模型类
【发布时间】:2012-06-28 23:09:12
【问题描述】:

我是 MVC3 的新手。当我创建一个强类型视图时,它在视图代码文件的顶部使用此代码

@model MonoPoly.Models.LandDocument

所以这意味着视图可以使用该模型类(这里是这个 LandDocument 模型类)的所有属性。但我的问题是如何将更多模型类作为这个单一视图文件的强类型?或者我应该如何在这个视图中调用其他已经使用该 LandDocument 模型类强类型化的模型类属性?

对不起,我的英语不好。

【问题讨论】:

标签: asp.net-mvc-3


【解决方案1】:

一种方法是创建一个ViewModel 对象,其中包含您希望在视图中引用的所有对象。在Steve Michelotti's blog: Pattern 2 – Dedicated view model that contains the domain model object上查看如何实现 ViewModel 模式的详细信息

例如,如果您想要LandDocument 类和Player 类,您可以像这样创建ViewModel

public class BoardViewModel
{
    public LandDocument LandDocument { get; set; }
    public Player LandOwner { get; set; }
}

然后在您的视图顶部:

@model MonoPoly.ViewModels.BordViewModel

您可以像这样访问视图中的数据,例如:

@Model.LandDocument.LandDocumentId

【讨论】:

  • 嗯...用所有这些模型类属性进行另一个母视图模型调用可以吗?
  • 是的,这是一种非常常见的模式,并且在许多场景中都能很好地工作。对于大型、复杂的视图,最好使用帖子中描述的“模式 3”,但这种选择很大程度上取决于您的情况。
【解决方案2】:

创建一个复合视图模型类来封装您需要的所有对象。

例子:

public class InvoiceViewModel
{
    public InvoiceHeader Header { get; set; }
    public List<InvoiceDetail> Details { get; set; }
}

【讨论】:

  • 我听不懂你的回答,你能让我更详细地理解吗?请?
  • 我提供的InvoiceViewModel 示例是您将传递给视图的内容。您可以将发票标题称为Model.Header,将发票详细信息称为Model.Details。您可以将其中的各个字段称为Model.Header.NameModel.Header.Address 等。
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多