[英]MVC Display attribute from another model
所以我的观点是这样开始的
@model ApplicationName.Models.A
并从A接收我的数据库元素,因此,如果我要使用@ Html.DisplayFor(model => model.What),它将在我的视图中显示数据库中的该元素。
但是,我还有另一个要显示在同一页面/视图上的属性。 但这是在Models.B中
所以我需要结束这个
@ Html.DisplayFor(model => model.WhateverFromB)
所有帮助极大的赞赏
您应该使用封装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
。
您应该为此使用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-应用程序
实际上,您应该创建一个包含所需所有属性的ViewModel,然后可以从多个Model中填充该ViewModel。 然后在MVC页面中将ViewModel用作“模型”。
但是要回答你的问题。 只需编写一个额外的Html.Display条目
在您的控制器中
ViewBag.WhateverFromB = b_obj;
然后在您看来
@Html.Display(ViewBag.WhateverFromB)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.