在MVC3中如何获取验证消息以使用我的自定义ModelMetadataProvider?

时间:2015-09-24 14:57:20

标签: c# asp.net-mvc asp.net-mvc-3

我有一个自定义的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));

但是虽然标签等正确显示,但验证消息仍然没有。

我现在已经搜索了一段时间,虽然我发现了几个注意到相同问题的地方,但我找不到任何解决方案。

0 个答案:

没有答案