从驼峰大小写字段名自动生成数据注释
本文关键字:自动生成 数据 注释 写字段 小写字 | 更新日期: 2023-09-27 17:50:07
我正在做一个有大量数据表的项目,并通过ASP.net MVC屏幕显示它们。
我发现自己写了很多简单的数据注释,像这样:
[Display(Name = "Manager Name")]
public string ManagerName { get; set; }
[Display(Name = "Employee Name")]
public string EmployeeName { get; set; }
[Display(Name = "Employee No")]
public string EmployeeNo { get; set; }
[Display(Name = "Manager Employee No")]
public string ManagerEmployeeNo { get; set; }
这是相当乏味的,我想知道是否有一种方法,我可以添加一个新的属性,说"convertFromCamel"(或其他东西)或有一种方法来覆盖
@Html.DisplayNameFor(m => Model.First().EmployeeNo)
因此,如果没有数据注释,它将从驼峰大小写转换现有字段名。
thanks in advance
结合在这里的博客上找到的信息,以及这里优秀的骆驼大小写分割正则表达式,我能够解决这个问题。其概念是创建默认DataAnnotationsModelMetadataProvider
的自定义风格。在属性还没有显示名的情况下,这个自定义提供程序会为您创建一个显示名(带有空格)。
首先创建一个类:
using System;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Web.Mvc;
namespace MyProject.Whatever
{
public class CustomDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, PropertyDescriptor propertyDescriptor)
{
ModelMetadata metadata = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
if (metadata.DisplayName == null)
{
metadata.DisplayName = SplitCamelCase(metadata.GetDisplayName());
}
return metadata;
}
private string SplitCamelCase(string str)
{
return Regex.Replace(
Regex.Replace(
str,
@"('P{Ll})('P{Ll}'p{Ll})",
"$1 $2"
),
@"('p{Ll})('P{Ll})",
"$1 $2"
);
}
}
}
现在通过以下操作覆盖Global.asax.cs
文件中的默认DataAnnotationsModelMetadataProvider
:
protected void Application_Start()
{
//Other stuff.
...
ModelMetadataProviders.Current = new CustomDataAnnotationsModelMetadataProvider();
}