在View中处理来自ViewModel的数据

时间:2016-04-04 14:40:01

标签: c# asp.net-mvc linq

我使用ViewModel将数据从两个表传递到视图。一个表包含工作人员的姓名,第二个表包含他们每周工作的小时数等数据。当我列出一个表中的名字时,我还想显示与那些人ID相匹配的工作时间。可以使用whereequal之类的LINQ来实现这一点吗?有人能给我看一个简单的样本吗?

编辑:有更好的方法吗?我应该在控制器中处理这个吗?

这是我目前在视图中使用的代码:

@foreach (var item in Model.resourceList)
{
<p>@item.FirstName</p>
}

@foreach (var item in Model.activityList)
{
<p>@item.NumberOfHoursPerWeek</p>
}

3 个答案:

答案 0 :(得分:0)

如果你正在循环:

private boolean closeApplication() {
    final JFrame temp = this;
    int exitDialogResult = JOptionPane.showConfirmDialog(temp, 
            "Are you sure you want to exit?", "Really Closing?", 
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE);
    if (exitDialogResult == JOptionPane.YES_OPTION) {
            //code here to stop various processes               
            return true;
        }
    else {
        return false;
    }
}

然后在该循​​环中,您可以匹配@foreach (var item in Model.resourceList) { ... } 中的任何元素,就像任何其他LINQ查询一样。也许这样的事情?:

Model.activityList

实际比较(在此示例中为@Model.activityList.Single(a => a.SomeID == item.SomeID).NumberOfHoursPerWeek )取决于您,以及您要查找的记录的逻辑(a.SomeID == item.SomeID.Where(),{{1}等等取决于你期望的行为)取决于你。但是在此视图代码中查找集合中的元素与在任何服务器端代码中都是相同的。

答案 1 :(得分:0)

忽略所有设计问题,这是一个解决方案:

@foreach (var item in Model.resourceList)
{
    @{
        var numberOfHours = Model.activityList.First(_ => _.UserID == item.ID).NumberOfHoursPerWeek;
    }
    <p>@item.FirstName</p>
    <p>@numberOfHours</p>
}

但是,View应该尽可能简单。 ViewModel负责以易于使用的形式为View准备数据。如果操作正确,您的视图中不需要任何linq查询。

答案 2 :(得分:-1)

你可以像这样使用它

if if

//just an example to make condition true not displaying the exact Property or condition
@if (true)
{
    Model.Where(model=>model.UserID==User.UserID)
}

或循环

 @foreach (var item in Model.resourceList)
 {
     //just an example not displaying the exact Property
     Model.Where(model=>model.UserID==User.UserID)
 }