我有一个自定义的ModelMetadataProvider,它根据在属性名称中以大写字母后添加空格来设置显示名称:
public class ModelMetadataProviderPlus : ModelMetadataProvider
{
private readonly ModelMetadataProvider _BaseProvider;
public ModelMetadataProviderPlus(ModelMetadataProvider baseProvider)
{
_BaseProvider = baseProvider;
}
private void SetMissingDisplayName(ModelMetadata modelMetaData)
{
if (modelMetaData.DisplayName == null && modelMetaData.PropertyName != null)
{
modelMetaData.DisplayName = modelMetaData.PropertyName.AddSpacesAfterCaps();
}
}
public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType)
{
var Result = _BaseProvider.GetMetadataForProperties(container, containerType);
return Result.Select(r =>
{
SetMissingDisplayName(r);
return r;
});
}
public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName)
{
var Result = _BaseProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName);
SetMissingDisplayName(Result);
return Result;
}
public override ModelMetadata GetMetadataForType(Func<object> modelAccessor, Type modelType)
{
var Result = _BaseProvider.GetMetadataForType(modelAccessor, modelType);
SetMissingDisplayName(Result);
return Result;
}
}
我使用
配置MVC框架以使用它ModelMetadataProviders.Current = new ModelMetadataProviderPlus(ModelMetadataProviders.Current);
这一切都运行正常,但验证错误消息似乎并没有使用此提供程序,因为[Required]
属性的错误消息(例如):The DefectCount field is required.
。
我使用的是nInject,所以我尝试了:
kernel.Bind<ModelMetadataProvider>().ToConstant(new ModelMetadataProviderPlus(ModelMetadataProviders.Current));
但是虽然标签等正确显示,但验证消息仍然没有。
我现在已经搜索了一段时间,虽然我发现了几个注意到相同问题的地方,但我找不到任何解决方案。