ASP.NET MVC中的ViewModel详细视图

时间:2017-08-25 10:41:36

标签: c# asp.net asp.net-mvc

我有一个班级名称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'(你是否错过了使用指令或者   装配参考?)

1 个答案:

答案 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) 
}