C# 如何使用组合属性扩展ViewModel

C# 如何使用组合属性扩展ViewModel,c#,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,Asp.net Mvc Viewmodel,在MVC项目中,我使用这个simpel ViewModel来填充.cshtml中的表。每个列都很容易填充设备对象的属性 我需要创建一个新列并用计数填充它。此计数是从服务器上的deviceId精心编制的 我想用Count属性扩展我的ViewModel。计数由用于检索列表和计数的每个deviceId精心编制 所以我的问题是如何设计这个“组合”视图模型?我曾考虑过将其全部封装在一个私人课程中,但我不知道这是否是最佳实践 视图模型: public class DeviceViewModel {

在MVC项目中,我使用这个simpel ViewModel来填充.cshtml中的表。每个列都很容易填充设备对象的属性

我需要创建一个新列并用计数填充它。此计数是从服务器上的deviceId精心编制的

我想用Count属性扩展我的ViewModel。计数由用于检索列表和计数的每个deviceId精心编制

所以我的问题是如何设计这个“组合”视图模型?我曾考虑过将其全部封装在一个私人课程中,但我不知道这是否是最佳实践

视图模型:

public class DeviceViewModel
{
    public List<Device> Devices { get; set; }
}
<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Priority</th>
            <th>Version</th>
            <th>Count</th>
        </tr>
    </thead>

    <tbody>
    @{
        foreach (var composedDevice in Model.ComposedDevices)
        {
            <tr id="@composedDevice.ID">
                <td>@composedDevice.Name</td>
                <td>@composedDevice.Priority</td>
                <td>@composedDevice.Version</td>
                <td>@composedDevice.Count</td>
            </tr>
        }
    }
    </tbody>
</table>
公共类设备视图模型
{
公共列表设备{get;set;}
}
.cshtml:

<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Priority</th>
            <th>Version</th>
        </tr>
    </thead>

    <tbody>
    @{
        foreach (var device in Model.Devices)
        {
            <tr id="@device.ID">
                <td>@device.Name</td>
                <td>@device.Priority</td>
                <td>@device.Version</td>
            </tr>
        }
    }
    </tbody>
</table>

名称
优先事项
版本
@{
foreach(Model.Devices中的var设备)
{
@设备名称
@设备,优先级
@设备版本
}
}
我想象.cshtml是这样的,不知道ViewModel:

public class DeviceViewModel
{
    public List<Device> Devices { get; set; }
}
<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Priority</th>
            <th>Version</th>
            <th>Count</th>
        </tr>
    </thead>

    <tbody>
    @{
        foreach (var composedDevice in Model.ComposedDevices)
        {
            <tr id="@composedDevice.ID">
                <td>@composedDevice.Name</td>
                <td>@composedDevice.Priority</td>
                <td>@composedDevice.Version</td>
                <td>@composedDevice.Count</td>
            </tr>
        }
    }
    </tbody>
</table>

名称
优先事项
版本
计数
@{
foreach(Model.ComposedDevices中的var composedDevice)
{
@composedDevice.Name
@组合设备。优先级
@composedDevice.Version
@组合设备。计数
}
}

我不太明白你在这里的意思,你能举个例子吗?你的意思是你想在你的设备上按Id分组一个
GroupBy
?为什么你不能在
设备上添加
Count
?此外,还可以使用
@foreach(…){}
使用具有
int Count
属性的视图模型。您当前的
DeviceViewModel
实际上不是一个视图模型-您可以将
IEnumerable
传递给视图。这就是为什么您需要一个视图模型-
public class DeviceVM
,其属性为
ID
Name
Priority
Version
Count
然后将
IEnumerable
传递给视图