我有一个班级名称Flight
。
我希望将此类(flight
)与一个名为count
的额外字段一起使用。
我创建了一个ViewModel
,如下所示:
public IEnumerable<Departure> Departures { get; set; }
public IEnumerable<Destination> Destinations { get; set; }
public IEnumerable<Airline> Airlines { get; set; }
public int count { get; set; }
public IEnumerable<Flight> Flights { get; set; }
flights
还有3个其他类。
但我无法在详细视图中使用此视图模型:
<span class="glyphicon glyphicon-arrow-right"></span>
@Html.DisplayFor(Model => Model.flight.Departure.Name)
这是我的get方法:
public ActionResult Add(int id)
{
var flight = db.Flights.SingleOrDefault(f => f.Id == id);
if (flight == null)
{
return HttpNotFound();
}
var viewModel = new BuyViewModel
{
Flights = db.Flights.ToList(),
};
return View(viewModel);
}
我得到了错误:
'BuyViewModel'不包含'flight'的定义,没有 扩展方法'flight'接受类型的第一个参数 可以找到'BuyViewModel'(你是否错过了使用指令或者 装配参考?)
答案 0 :(得分:2)
首先,您的ViewModel
没有名为flight
的属性,而且是Flights
,其次您不应该在{1}}中使用Model
作为参数。它隐藏了页面的Model
属性。
另请注意Flights
类型为IEnumerable<Flight>
,因此您无法访问Departure
媒体资源。您应该将Flights
的类型更改为Flight
,然后:
@Html.DisplayFor(m => m.Flights.Departure.Name)
或者如果你仍然希望它是IEnumerable
,那么你可以这样做:
@Html.DisplayFor(m => m.Flights.Select(c => c.Departure).FirstOrDefault().Name)
或迭代Flights
:
@foreach (var flight in Model.Flights)
{
@Html.DisplayFor(m => flight.Departure.Name)
}