使用ViewModel的C#MVC强类型视图

时间:2014-12-02 21:47:41

标签: c# asp.net-mvc linq asp.net-mvc-4

我有一个名为MyViewModel ViewModel ,其中包含:

public IList<Config> Config { get; set; }
public bool Disabled { get; set; }
public string Name { get; set; }

Config是一个包含ID&amp;的对象。 Value

在控制器端

我填充所有值,在视图中我需要访问id = x这个配置单个项目的列表,它应该在标签中显示相应的值。所以我需要一个强类型标签,用于以下内容:

@Html.LabelFor(a => ....)

我不确定我的Linq语句应该在Config.Id = x标签中显示Config.Value。任何帮助将不胜感激。感谢

3 个答案:

答案 0 :(得分:1)

要显示按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()方法,因为只需使用与HTML内联的简写@ object.property就足够了。

答案 1 :(得分:0)

按组显示列表尝试此

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

答案 2 :(得分:0)

在它上面睡觉后&amp;尝试了几次我终于明白了。这就是我想要的:

@Html.Label(Model.Config.FirstOrDefault(x => x.ConfigId == "x").Value)

出于某种原因,它不适用于@ Html.Display。知道为什么吗?感谢所有的意见和建议。