所以我的观点就像这样开始了
@model ApplicationName.Models.A
并从A中获取我的数据库元素,所以如果我使用@ Html.DisplayFor(model => model.Whatever),它将在我的视图中显示数据库中的该元素。
但是,我还有另一个属性,我想在同一页面/视图上显示。但它在Models.B
所以我需要最终得到这个
@ Html.DisplayFor(model => model.WhateverFromB)
所有人都非常感谢
答案 0 :(得分:4)
您应该使用包含A
和B
的视图模型。例如:
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)
同样,如果您不需要A
和B
中的每个属性,或者两个数据库对象之间的语义差异对视图不重要,您可以考虑执行以下操作:
class MyViewModel
{
public object Whatever {get; set;}
public object WhateverFromB {get; set;}
}
填充视图模型的各个属性并相应地使用。您当然可以使用两者的组合,包括完整A
和WhateverFromB
。
答案 1 :(得分:0)
您应该使用ViewModel
。当您在视图中需要多个模型时,这是一个很好的方法。在ViewModel类中包含您正在使用的模型所需的内容,并在视图中引用它而不是模型。
这将让你进入ViewModels
http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3
ViewBags
和ViewData
会有效,但每次都有适当的时间。
http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications
答案 2 :(得分:0)
实际上,您应该创建一个包含所需属性的ViewModel,并且可以从多个模型中填充ViewModel。然后使用ViewModel作为MVC页面中的“模型”。
然而,要回答你的问题。只需编写一个额外的Html.Display条目
在您的控制器中
ViewBag.WhateverFromB = b_obj;
然后在你的视图中
@Html.Display(ViewBag.WhateverFromB)