繁体   English   中英

来自其他模型的MVC显示属性

[英]MVC Display attribute from another model

所以我的观点是这样开始的

@model ApplicationName.Models.A

并从A接收我的数据库元素,因此,如果我要使用@ Html.DisplayFor(model => model.What),它将在我的视图中显示数据库中的该元素。

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

所以我需要结束这个

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

所有帮助极大的赞赏

您应该使用封装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

您应该为此使用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-应用程序

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

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

在您的控制器中

ViewBag.WhateverFromB = b_obj;

然后在您看来

@Html.Display(ViewBag.WhateverFromB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM