如何从EditorFor中访问ViewModel的根对象

本文关键字:ViewModel 对象 访问 EditorFor | 更新日期: 2023-09-27 17:57:45

我有一个视图,当然还有它自己的ViewModel:

@model TransportViewModel 

我正在使用EditorFor显示我的ViewModel对象之一的属性列表:

@Html.EditorFor(model => model.Car.WheelPropertyList)

在我的编辑器内部因为我可以很容易地显示我的属性:

@model WheelProperty
@Html.Label(Model.PropertyA)
@Html.Label(Model.PropertyB)

我的问题是:如何从EditorFor中访问ViewModel的"根"?上面写的代码正在访问:

TransportViewModel.CarWheelPropertyList.ElementAt(n).PropertyATransportViewModel.CarWheelPropertyList.ElementAt(n).PropertyB

这是可以理解的。问题是,我如何访问,例如:

TransportViewModel.Train.ModelList.ElementAt(0).Name

来自我的编辑For?

我知道使用ViewBag可以解决这个问题。然而,我一直听说,如果你的ViewModel是完美的,你就根本不需要使用任何ViewBag。这是真的吗?还是在这种特殊情况下我真的应该使用ViewBag?

如何从EditorFor中访问ViewModel的根对象

一种方法是在子对象中提供对根对象的引用:

public class TransportViewModel  
{
    public List<WheelProperty> WheelPropertyList {get;set;}
    ...
}
public class WheelProperty
{
    public TransportViewModel TransportView {get;set;}
    public string PropertyA {get;set;}
    public string PropertyB {get;set;}
    ...
}

然后,编辑器可以轻松地引用根对象的属性。

您可以这样做来访问Car:的属性

foreach(var item in Model.Car.WheelPropertyList)
{
<span>@item.PropertyA</span>
<span>@item.PropertyB</span>
}