繁体   English   中英

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

[英]C# MVC strongly typed view with ViewModel

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

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

Config是一个包含IDValue的对象

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM