来自另一个模型的MVC Display属性

时间:2014-01-07 00:34:38

标签: c# asp.net-mvc

所以我的观点就像这样开始了

@model ApplicationName.Models.A

并从A中获取我的数据库元素,所以如果我使用@ Html.DisplayFor(model => model.Whatever),它将在我的视图中显示数据库中的该元素。

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

所以我需要最终得到这个

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

所有人都非常感谢

3 个答案:

答案 0 :(得分: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;}
}

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

然而,要回答你的问题。只需编写一个额外的Html.Display条目

在您的控制器中

ViewBag.WhateverFromB = b_obj;

然后在你的视图中

@Html.Display(ViewBag.WhateverFromB)