我通过从DataAnnotationsModelMetadataProvider
继承来编写自定义元数据提供程序。自定义提供程序包含GetMetadataforProperty
和CreateMetadata
的覆盖实现。
当我从控制器类方法返回ActionResult
时,将执行自定义元数据提供程序的代码。但是,如果我返回JsonResult
,则不会触发自定义元数据提供程序代码。
我错过了什么吗?任何帮助将不胜感激。
答案 0 :(得分:0)
这是MVC框架的正确行为,你所要求的实际上并没有意义。
当您从控制器返回JsonResult
时,您只是告诉MVC将JSON格式的内容直接发送到响应。您的控制器操作方法已经完成了此时所需的一切。
但是,如果您返回类型为ActionResult
的{{1}},则需要在将任何内容写入响应之前进行进一步处理。呈现视图时,您需要提供元数据中的信息,以便框架调用元数据提供程序为您的视图提供所需信息。
因此,当您返回ViewResult
时未调用元数据提供程序的原因是因为它不是必需的。
我建议查看this帖子,其中提供了MVC管道图表的链接,这将帮助您了解正在发生的事情。