模型属性的Foreach循环

时间:2017-04-18 08:25:02

标签: asp.net razor foreach

我有这样的模特:

timeNow

在.cshtml文件中,我想显示类似&#34的消息;如果InnerPropertyContainer中的所有属性都设置为False,则没有选择"。所以现在我在cshtml文件中做下一个技巧:

public class MyModelClass
{
   /*some properties*/
   public InnerPropertyContainer InnerContainer {get;set;}
}

public class InnerPropertyContainer
{
   public bool Soccer{get;set;}
   public bool Basketball{get;set;}
   public bool Golf{get;set;}
   /*etc...*/
}

看起来有点像"解决方法"决策。有没有办法使用像

这样的东西
@{
    bool hasSomethingSelected = false;
}

@if(Model.InnerPropertyContainer.Golf)
{
   hasSomethingSelected = true;
   /*displaying div's etc*/
}

/*doing same for each propery*/

@if(!hasSomethingSelected)
{
  <div>Nothing has been selected.</div>
}

无法找到任何解决方案。

1 个答案:

答案 0 :(得分:0)

您可以使用反射,从模型中收集所有布尔属性,提取它们的值并查看它们是否为真:

@{
    bool hasSomethingSelected = (from prop in Model.InnerPropertyContainer.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
                where prop.PropertyType == typeof(bool)
                select (bool)prop.GetValue(env)).Any(p => p);

}

请记住在剃须刀视图中使用

@using System.Reflection