2012-06-28 137 views
2

我是新的MVC3。当我创建一个强类型的视图它的视图代码文件MVC3更强类型模型类

@model MonoPoly.Models.LandDocument 

使用此代码的顶部,这样就意味着视图可以使用所有属性从Model类(这里这个LandDocument模型类)。但我的问题是我怎么能用更多的模型类作为这个单一的视图文件的强类型?或者我应该如何在这个视图中调用其他模型类属性,这个视图已经被LandDocument Model类强制类型化了?

对不起,我的英语不好。

+0

[如何在单个Razor视图中编辑多个模型]的可能重复(http://stackoverflow.com/questions/10720756/how-to-edit-multiple-models-in-a-single-razor-查看) –

回答

4

一种方法是创建一个ViewModel对象包含所有你想在视图中引用的对象。查看如何落实Steve Michelotti's blog: Pattern 2 – Dedicated view model that contains the domain model object

例如视图模型模式,如果你想既LandDocument类的细节和Player类,你可以创建一个ViewModel这样的:

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

,然后在您的视图的顶部:

@model MonoPoly.ViewModels.BordViewModel 

您就可以访问数据在你看来像这样,例如:

@Model.LandDocument.LandDocumentId 
+0

Humm ...是否可以使用所有这些模型类属性进行另一个母视图模型调用? – zxprince

+0

是的,这是一种非常常见的模式,在许多情况下运行良好。对于大型,复杂的视图,使用帖子中描述的“模式3”可能会更好,但该选择在很大程度上取决于您的情况。 –

+0

非常感谢你:) – zxprince

0

创建一个组合视图模型类,它封装了所有需要的对象。

例子:

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

我不明白你的答案你能让我了解更多细节吗?请 ? – zxprince

+1

我提供的'InvoiceViewModel'示例是您将传递给View的内容。您可以将发票标题称为“Model.Header”,并将发票明细称为“Model.Details”。你可以参考这些单独的字段,如'Model.Header.Name','Model.Header.Address'等。 –