我通过从DataAnnotationsModelMetadataProvider
. GetMetadataforProperty
自定义提供程序包含和的覆盖实现CreateMetadata
。
当我ActionResult
从我的控制器类方法返回时,我的自定义元数据提供程序的代码将被执行。但是,如果我返回JsonResult
,则不会命中自定义元数据提供程序代码。
我错过了什么吗?任何帮助,将不胜感激。
我通过从DataAnnotationsModelMetadataProvider
. GetMetadataforProperty
自定义提供程序包含和的覆盖实现CreateMetadata
。
当我ActionResult
从我的控制器类方法返回时,我的自定义元数据提供程序的代码将被执行。但是,如果我返回JsonResult
,则不会命中自定义元数据提供程序代码。
我错过了什么吗?任何帮助,将不胜感激。
这是 MVC 框架的正确行为,您所要求的实际上没有意义。
当您JsonResult
从控制器返回时,您只是告诉 MVC 将 JSON 格式的内容直接发送到响应。此时,您的控制器操作方法已经完成了所需的一切。
但是,如果您返回一个ActionResult
类型ViewResult
,则在将任何内容写入响应之前需要进行进一步的处理。渲染视图时需要提供元数据中的信息,因此框架将调用元数据提供程序为您的视图提供所需的信息。
因此,当您返回时未调用您的元数据提供程序的原因JsonResult
是因为它不是必需的。
我建议查看这篇文章,它提供了指向 MVC 管道图的链接,这将帮助您了解正在发生的事情。