为什么 Display(Name = "") 属性在我的一个 ViewModel 中被忽略,而它似乎在我的 ASP.NET MVC5 中的其他模型中工作?

Why is the Display(Name = "") attribute ignored in one of my ViewModels while it seems to work in my other models in ASP.NET MVC5?

我有一个视图模型 BeerNamePartialVM,它有一个 属性 和一个似乎不起作用的 [Display(Name = "")] 属性。我还包括了我的基本模型,它也有一个 属性 和一个 [Display(Name = "")] 属性,它确实有效:

public class BeerNamePartialViewModel : IPartialPropertySearch
{
    [Required(ErrorMessage = "This field is required")]
    [Display(Name = "Name or partial name")]
    //[DisplayName("Name or partial name")]
    public string PartialName { get; set; }
    ...
}

public class BierProperties
{
    [Required, StringLength(50), Display(Name = "Name")]
    public string Naam { get; set; }
    ...
}

两个突出显示的文本是使用 DisplayNameFor HtmlHelper 函数生成的,如下所示:

@model MVCBierApplication.Interfaces.IPartialPropertySearch
@Html.DisplayNameFor(f => f.PartialName)
@Html.EditorFor(f => f.PartialName)
@Html.ValidationMessageFor(f => f.PartialName)
...

@{Beer emptyModel = new Bier();}
@if (Model.Results != null && Model.Results.Count() != 0)
{
    <thead>
        <tr>
            <td>@Html.DisplayNameFor(h => Model.emptyModel.Naam</td>
            ...
        </tr>
        ...

emptyModel 是一个 Beer 类型的空模型,我用它来构建 table header。这是必要的,因为我的视图有接口 IPartialPropertySearch 作为它的模型,returns 结果是 Object 类型的 IEnumerable 而不是 Beer。这样做是因为我想将我的代码重新用于 Beer 以外的模型。

结果看起来像这样(这是我的第一个问题,所以我没有足够的声誉来显示图像 in-post):

注意突出显示的标签。文本框上方的标签似乎忽略了它的 属性 的 [Display] 属性,而 table header 中的标签按预期工作。

我也尝试过使用 [DisplayName("name")],首先是单独使用,然后甚至与 [Display(Name =)] 一起使用,但似乎都不起作用。我已经重新启动了我的 IIS 服务器,清除了我的浏览器缓存和 运行 四个不同浏览器中的应用程序,所有这些都给出了相同的结果。

[Required] 属性确实有效,当我提交表单而不输入名称时,会显示 [required] 标签中设置的错误消息。唯一被忽略的属性是那些改变名称的属性:

我还在项目的存储库中包含了一个 link 以防我的图片不够清晰或者你想自己测试一下。有些部分可能是荷兰语,但我认为应该足够清楚了。存储库中还包含一个 SQL 文件,用于重新创建我正在使用的数据库。

我认为这是因为您的模型引用的是界面而不是 class。 @model MVCBierApplication.Interfaces.IPartialPropertySearch 改为 @model MVCBierApplication.Models.BeerNamePartialViewModel