为什么 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
我有一个视图模型 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