2014-01-07 94 views
1

所以我的视图开始了这样MVC显示属性

@model ApplicationName.Models.A 

并取入从A所以我的数据库元素如果我是使用@ Html.DisplayFor(型号=> model.Whatever)它会在我的视图中显示数据库中的那个元素。

但是我有另一个属性,我想也显示在同一页/视图。但它在Models.B

所以我注定要与落得如此

@ Html.DisplayFor(型号=> model.WhateverFromB)

所有帮助非常感谢

回答

0

您应该使用一个ViewModel为此。当您在视图中需要多个模型时,这是一个好方法。包括您在ViewModel类中使用的模型所需的内容,并在视图中而不是模型中引用它。

这将让你与ViewModels http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3

ViewBagsViewData去工作,但也有适当的时间使用每个。 http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

4

您应该使用封装了AB的视图模型。例如:

class MyViewModel 
{ 
    public ApplicationName.Models.A A {get; set;} 
    public ApplicationName.Models.B B {get; set;} 
} 

然后将这个单视图模型传递给控制器​​。那么你当然会访问喜欢你的属性:

@Html.DisplayFor(m => m.A.Whatever) 
@Html.DisplayFor(m => m.B.WhateverFromB) 

同样,如果你不需要从AB,或两个数据库对象之间的语义差别每个属性是不是认为重要的是,你可能会考虑执行以下操作:

class MyViewModel 
{ 
    public object Whatever {get; set;} 
    public object WhateverFromB {get; set;} 
} 

填充视图模型的各个属性并相应地使用。您当然可以使用两者的组合,包括完整的A以及WhateverFromB

+0

+1避免。当你想显示/从用户接收数据时,你应该使用特定的ViewModel,然后将所需的数据转换成域对象。 – Xenolightning

0

实际上,您应该创建一个ViewModel,它包含您需要的所有属性,并且您可以从多个模型中填充该ViewModel。然后使用ViewModel作为MVC页面中的“模型”。

但是要回答你的问题。只要写一个额外的Html.Display进入

在你的控制器

ViewBag.WhateverFromB = b_obj; 

,然后在视图中使用域对象在你的意见

@Html.Display(ViewBag.WhateverFromB)