2016-04-30 53 views
1

我已經開發了一個ViewModel,它具有與Model類相同的信息,但我向ViewModel添加了一個名爲AvgAge(所有人的年齡平均值)的字段,我想要顯示一個表中的視圖與這些領域:名稱,姓氏和所有人的年齡...和表上方我想顯示與所有人的年齡平均值的標籤..我需要聲明內查看ViewModel作爲IEnumerable,所以我可以迭代列表並在桌面上顯示信息..直到這裏一切正常。現在的問題是,當我試圖展示年齡平均的結果時,這只是一個結果。你對我有什麼建議?在視圖中顯示ViewModel的平均值

方法我用,以顯示人在表列表:

public List<PersonAgeAvg> AvgAge() 
     { 
      var list = db.People.Select(x => new PersonAgeAvg 
      { 
       Name = x.Name, 
       LastName = x.LastName, 
       Age = x.Age    
      }).ToList(); 
      return list; 
     } 

我知道我可以用這樣的查詢得到的年齡平均水平,但在那裏我應該使用此查詢??:

AvgAge = db.People.Select(p => p.Age).Average() 

查看:

@model IEnumerable<AlexMusicStore.ViewModel.PersonAgeAvg> 
@{ 
    ViewBag.Title = "GetPersonAgeAvg"; 
} 

<h2>GetPersonAgeAvg</h2> 
<p> 
@Html.ActionLink("Create new", "Create")  
</p> 
<label>Average Age: </label> 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Name) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.LastName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Age) 
     </th> 
    </tr> 
@foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Name) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.LastName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Age) 
      </td> 
     </tr> 
    } 
</table> 

也許解決方案應該與公司僅創建一個視圖模型eAverage字段,但我不知道如何在視圖中顯示AgeAverage字段,然後使用其他元素名稱,姓氏和年齡...可以在同一視圖中顯示來自不同ViewModel的字段?

回答

0

我這樣做是使用元組的方法,此方法允許在同一視圖兩種款式或的ViewModels以上工作...

控制器動作:

public ActionResult GetPersonAgeAvg() 
     { 
      var avg = ope.AgeAverage(); 
      IEnumerable<Person> pers = db.People.ToList(); 
      var tuple = new Tuple<IEnumerable<Person>, PersonAgeAvg>(pers, avg); 
      return View(tuple); 
     } 

和INT查看:

@model Tuple<IEnumerable<AlexMusicStore.Models.Person>,AlexMusicStore.ViewModel.PersonAgeAvg> 

<label>Average Age: </label> @Html.DisplayFor(tuple => tuple.Item2.AvgAge) 

<table class="table"> 
@foreach (var item in Model.Item1) 
{ 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Name) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.LastName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Age) 
      </td> 
     </tr> 
    } 
</table> 
0
在您的視圖

,你可以做這樣的事情

@ var avAge=Model.People.Select(p => p.Age).Average();