【问题标题】:Display only certain values from model仅显示模型中的某些值
【发布时间】:2016-01-19 16:53:35
【问题描述】:

我试图仅显示适用于模型中某个项目的值。 我有一个列表,其中包含我要显示的模型中的属性名称。这是我拥有的代码(但不起作用)

foreach (var item in ViewBag.attributes)
        {
            var attribute = item.Attributename;
            var value = Model.Equals(attribute);
            <dt>                    
                @Html.DisplayNameFor(model => value)
            </dt>
            <dd>
                @Html.DisplayFor(model => value)
            </dd>
        }

这样会起作用:

            <dt>                    
                @Html.DisplayNameFor(model => model.Name)
            </dt>
            <dd>
                @Html.DisplayFor(model => model.Name)
            </dd>

但我不希望名称被硬编码,这就是为什么我将它放在我的列表中。
“名称”和其他一些值保存在属性列表中。
我实际上想要发生的事情是这样的:

@Html.DisplayFor(model => model.(ListItem.attributename))

所以我的问题是:是否可以在“模型”之后放置一个变量?
我知道这可能有点令人困惑,但我希望我提供了足够的信息,如果没有,请随时询问更多信息。

【问题讨论】:

  • 不清楚您的要求。 @Html.DisplayFor(model =&gt; model.Name) 将显示Name 的值而不是“显示所有字段”
  • 对不起@StephenMuecke 它确实有点含糊,但我不想在(model =&gt; model.Name) 中硬编码名称,因为有时我想要显示的值会改变。
  • 你的模型是一类吗?您需要某种反射来按名称获取属性值
  • @JamieD77 它实际上是我从数据库中获取的一个实体,但这几乎是一样的吧?
  • 为什么不使用仅包含所需字段的 ViewModel?

标签: asp.net-mvc list model-view-controller view lambda


【解决方案1】:

如果未确定顺序,并且未编写按名称获取属性值的方法。你可以这样写你的观点..

@{
    var attrList = ViewBag.attributes as List<Attribute>;
}
<dt>                    
    @Html.DisplayNameFor(model => model.Name)
</dt>
@if (attrList.Any(a => a.Attributename == "Name"))
{
    <dd>
        @Html.DisplayFor(model => model.Name)
    </dd>
}
etc..

【讨论】:

  • 感谢您的回答,但这不是我的意思,很抱歉我的问题很难理解。问题是,我不想要模型。name 硬编码,Name 在属性列表中指定。然后对于属性列表中的每个项目(例如nameAmount_of_hoursServerID)它必须显示来自模型的值(这是来自数据库表的项目)
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多