c# - 为什么 Custom DataAnnotationsModelMetadataProvider 的 CreateMetadata 永远不会被调用?

标签 c# asp.net-mvc asp.net-mvc-5

我通过继承 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/

相关文章:

c# - 为什么关闭在单元测试中创建的窗口会引发 InvalidComObjectException?

c# - EntityType 'Uri' 没有定义键

c# - 帮助从控制台应用程序呈现 ASP.NET MVC View

c# - 在 ActionLink 的 RouteValues 中传递 IEnumerable 属性

c# - AvalonEdit:确定您是否在评论中

c# - 使用存储库模式 MVC 5 和 EF 6 的工作单元

asp.net-mvc - 如何处理只能在 UI 中实现的业务逻辑?

javascript - MVC5 Ajax.ActionLink 加载新页面而不是替换

asp.net - Windows 身份验证多次请求

c# - 在 View 中显示连接 linq 查询