【问题标题】:DisplayFor() to show what was selected from a drop down listDisplayFor() 显示从下拉列表中选择的内容
【发布时间】:2014-05-12 19:09:37
【问题描述】:

所以下拉列表具有价值/文本。该值是我存储在数据库中的值(因为它是列出要在下拉列表中显示的值/文本的表的主键)。当我填充下拉列表时,我使用值/文本。当用户选择时,它将值(数字)存储到事务表中。这意味着当我将它读回我的模型时,我得到的是数值而不是文本。但是,在选择 24 小时后,我只需要显示文本,因为它们无法进行更改。问题是它显示的是值 (1, 2, 3, 4) 而不是对人类更有意义的实际文本。

有没有办法在视图级别进行转换?我问的原因是因为我的模板分支并充当显示模板和编辑器模板,因为这是页面所需的功能。所以我很容易通过以下方式在编辑器模板部分中显示选定的值:

@Html.DropDownListFor(modelItem => item.RecordType, new SelectList(Model.RecordTypes, "RECORD_TYPE_ID", "RECORD_TYPE", item.RecordType)

但显示部分有:

@Html.DisplayFor(modelItem => item.RecordType)

这给了我价值数字而不是文本。我真的必须在我的视图模型中创建另一个字段并根据记录填充文本和值吗?正如您从 DropDownListFor() 中看到的那样,我有一个存储值/文本的 RecordTypes 列表,所以我可以使用该值来查找文本并通过 DisplayFor() 或其他函数从模板视图中显示它吗?

【问题讨论】:

  • 我能做到。对这种风格不感兴趣,因为它不能编辑,只显示文本是理想的。

标签: c# asp.net-mvc


【解决方案1】:

另一种选择可能是:

@Html.DisplayFor(modelItem =>
    Model.RecordTypes.FirstOrDefault(rt => rt.RECORD_TYPE_ID == item.RecordType))

更新:如评论中所述,正确的方法最终是:

@Model.RecordTypes.FirstOrDefault(rt => rt.RECORD_TYPE_ID == item.RecordType).RECORD_TYPE.ToString()

只显示字符串值。

【讨论】:

  • 如果它可以工作,那就太棒了,但是会出现错误:“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”
  • 这让我找到了一些可行的方法! @Model.RecordTypes.FirstOrDefault(rt => rt.RECORD_TYPE_ID == item.RecordType).RECORD_TYPE.ToString()。似乎不需要 DisplayFor()。
猜你喜欢
  • 2013-02-19
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2013-05-15
  • 1970-01-01
  • 2020-12-02
相关资源
最近更新 更多