其他分享
首页 > 其他分享> > 为什么自定义DataAnnotationsModelMetadataProvider的CreateMetadata永远不会被调用?

为什么自定义DataAnnotationsModelMetadataProvider的CreateMetadata永远不会被调用?

作者:互联网

我通过继承DataAnnotationsModelMetadataProvider并重写CreateMetadata方法创建了一个自定义提供程序:

public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, 
        Type containerType, Func<object> modelAccessor, 
        Type modelType, string propertyName)
    {
        //... code not included for brevity but execution never gets here
    }
}

然后我在MvcApplication类的Global.asax中注册了它:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        // Other code...
        System.Web.ModelBinding.ModelMetadataProviders.Current = 
            new CustomMetadataProvider();
    }
}

我设置了一个断点,上面的注册正在执行,并且正在设置Current.

问题/疑问

永远不会调用CreateMetadata方法.我还需要做什么?

解决方法:

您在Global.asax.cs文件中设置了错误的属性.代替:

System.Web.ModelBinding.ModelMetadataProviders.Current = 
        new CustomMetadataProvider();

应该是这样的:

ModelMetadataProviders.Current = 
        new CustomMetadataProvider();

如果您真的想提供完整的限定词,则实际上是:

System.Web.Mvc.ModelMetadataProviders.Current = 
        new CustomMetadataProvider();

标签:asp-net-mvc-5,c,asp-net-mvc
来源: https://codeday.me/bug/20191109/2013023.html