【问题标题】:How to use DisplayNameFor with view model?如何将 DisplayNameFor 与视图模型一起使用?
【发布时间】:2014-12-25 09:35:34
【问题描述】:

假设我们有这样的模型:

public class MyItem
{
    [DisplayName("TheTitle")]
    public string Title {get; set;}
}

如果是编辑/详细信息/删除视图中的简单模型,我们可以像这样使用@Html.DisplayNameFor:

@model MyItem; 

@Html.DisplayNameFor(model => model.Title) //Result "TheTitle"
@Html.EditorFor(model => model.Title)

或在列表视图中:

@model IEnumerable<MyItem>;

foreach (var myItem in Model)
{
    @Html.DisplayNameFor(model => model.Title) //Result "TheTitle". Seems the model is still MyItem, rather than Inemerable<MyItem>.
    @Html.EditorFor(model => model.Title)
}

这使得在许多视图上更改属性的标题变得更加容易。

但是复杂的视图模型例如:

public MyViewModel
{
    [DipslayName("Count")]
    int Count;
    IEnumerable<MyItem> MyItems;
}

在这种情况下,如何显示“TheTitle”?

@model IEnumerable<MyViewModel>;

@Html.DisplayNameFor(model => model.Count) //Result "TheCount".
@Html.EditorFor(model => model.Count)

@foreach (var myItem in Model.MyItems)
{
     @Html.DisplayNameFor(model => ???) //How to display "TheTitle" here?
     @Html.EditorFor(model => ???) //Same question, I think.
}

我在这里尝试了一些硬代码(字符串“@: TheTitle”而不是 DisplayNameFor),但认为这不是一个好习惯。

谢谢,圣诞快乐。

【问题讨论】:

  • 您尚未使用DisplayAattribute 标记您的MyItems
  • 您能举个例子吗?谢谢。

标签: asp.net-mvc html-helper


【解决方案1】:

你应该像这样在你的模型属性上放置一个DisplayAttribute 属性:

public MyViewModel
{
    [Display(Name = "Some Items")]
    IEnumerable<MyItem> MyItems;
    int Count;
}

之后你可以在你的视图中使用DisplayFor扩展方法,它会输出Some Items

【讨论】:

  • 啊,“Count”属性的好主意(我不知道 DisplayName 属性可以在任何地方使用,而不仅仅是 EF 的实体)。但这还不能解决 MyItems 的问题。我添加了一些新代码以使其清晰,再次感谢:)
  • 您是否尝试在您的foreach 循环中执行此操作:@Html.DisplayNameFor(model =&gt; myItem.Title)
  • 是的。在每个 myItem 的 中,它都有效。但是 呢?只有一个 并且那时不能使用 foreach 。无论如何,谢谢你的信息:)
猜你喜欢
  • 2022-07-19
  • 1970-01-01
  • 2022-08-19
  • 2020-06-27
  • 1970-01-01
  • 2011-11-12
  • 2011-03-12
  • 1970-01-01
  • 2016-07-30
相关资源
最近更新 更多