[英]C# MVC strongly typed view with ViewModel
我有一个名为MyViewModel
的ViewModel ,其中包含:
public IList<Config> Config { get; set; }
public bool Disabled { get; set; }
public string Name { get; set; }
Config是一个包含ID
和Value
的对象
在Controller端,我正在填充所有值,并且在视图中,我需要访问id = x
此Config单项列表,它应该在label中显示相应的值。 所以我需要按照以下方式为此使用一个强类型标签:
@Html.LabelFor(a => ....)
我不确定在显示Config.Id = x
标签中显示Config.Value的Linq语句应该是什么。 任何帮助将不胜感激。 谢谢
要显示按ID值分组的表,请首先创建所有现有ID号的列表。
ViewBag.Ids = Config.Select(x => x.Id).Distinct(); //create list of all existing Ids
通过ViewBag将该列表传递到View中,并对其进行遍历以及对象列表:
@foreach(int IdNum in ViewBag.Ids)
{
<table>
@foreach(Config c in Config.Where(x=> x.Id == IdNum))
{
<tr>
<td> @c.ID </td>
<td> @c.property1 </td>
<td> @c.property2 </td>
</tr>
}
</table>
}
在这种情况下,我不会理会LabelFor()方法,因为只需将简写@ object.property与HTML内联即可使用,这很容易。
按组显示列表请尝试
<table>
@{
foreach (var group in Model.Config.GroupBy(x => x.Id))
{
<tr>
<td>@group.Key</td> </tr>
int index =0;
@foreach(Config c in Model.Config.Where(x=> x.Id == group.Key))
{
<tr>
<td> @Model.Config[index].ID </td>
<td> @Model.Config[index].property1 </td>
<td> @Model.Config[index].property2 </td>
</tr>
index++;
}
}
}
</table>
睡了一段时间并尝试了几次之后,我终于明白了。 这就是我想要的:
@Html.Label(Model.Config.FirstOrDefault(x => x.ConfigId == "x").Value)
但是由于某种原因,它在@ Html.Display上不起作用。 知道为什么吗? 感谢您的所有评论和建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.