Lob*_*nts 9 c# asp.net-mvc data-annotations
我正在开发一个包含大量数据表的项目,并通过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; }
Run Code Online (Sandbox Code Playgroud)
这变得非常繁琐,并且想知道是否有一种方法可以添加一个新的属性,说"convertFromCamel"(或其他东西)或者是否有办法覆盖
@Html.DisplayNameFor(m => Model.First().EmployeeNo)
Run Code Online (Sandbox Code Playgroud)
因此,如果没有数据注释,它会从camel case转换现有的字段名称.
提前致谢
Jam*_*tan 10
使用的博客上找到的信息结合在这里,和优秀的驼峰分裂正则表达式在这里,我能来解决这一问题.这个概念是您创建默认的自定义风格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"
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在覆盖默认DataAnnotationsModelMetadataProvider在您Global.asax.cs通过执行以下文件:
protected void Application_Start()
{
//Other stuff.
...
ModelMetadataProviders.Current = new CustomDataAnnotationsModelMetadataProvider();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
746 次 |
| 最近记录: |