我通过继承 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();
关于c# - 为什么 Custom DataAnnotationsModelMetadataProvider 的 CreateMetadata 永远不会被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48708320/