为什么自定义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