在View

时间:2016-04-30 15:57:14

标签: c# html linq razor mvvm

我开发了一个ViewModel,它具有与Model Class相同的信息,但是我在ViewModel中添加了一个名为AvgAge的字段(所有人的年龄平均值),我想在视图中显示一个表格字段:所有人的姓名,姓氏和年龄......在表格上方我想显示一个带有所有人的年龄平均值的标签..我需要在View里面声明ViewModel为IEnumerable所以我可以迭代列表并显示表格上的信息..直到这里一切都很好。现在的问题是当我试图显示Age Average的结果时,它只是一个结果..你有什么建议我?

方法我用来显示表格中的人员列表:

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

我知道我可以通过这样的查询获得Age Average,但是我应该在哪里使用这个查询?:

 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>

也许解决方案应该是只使用AgeAverage字段创建一个ViewModel,但我不知道如何在视图中显示AgeAverage字段之后还有其他元素Name,Lastname和Age ...可以显示来自不同ViewModel的字段在同一个View ???

2 个答案:

答案 0 :(得分:0)

在你看来你可以做这样的事情

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

答案 1 :(得分:0)

我是使用Tuple方法完成的,此方法允许在同一个视图中使用两个模型或ViewModel或更多...

控制器操作:

 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);
        }

在视图中:

@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>