为JsonResult定制modelmetadataprovider

时间:2012-05-23 20:28:58

标签: asp.net-mvc actionresult modelmetadataprovider

我通过从DataAnnotationsModelMetadataProvider继承来编写自定义元数据提供程序。自定义提供程序包含GetMetadataforPropertyCreateMetadata的覆盖实现。

当我从控制器类方法返回ActionResult时,将执行自定义元数据提供程序的代码。但是,如果我返回JsonResult,则不会触发自定义元数据提供程序代码。

我错过了什么吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是MVC框架的正确行为,你所要求的实际上并没有意义。

当您从控制器返回JsonResult时,您只是告诉MVC将JSON格式的内容直接发送到响应。您的控制器操作方法已经完成了此时所需的一切。

但是,如果您返回类型为ActionResult的{​​{1}},则需要在将任何内容写入响应之前进行进一步处理。呈现视图时,您需要提供元数据中的信息,以便框架调用元数据提供程序为您的视图提供所需信息。

因此,当您返回ViewResult时未调用元数据提供程序的原因是因为它不是必需的。

我建议查看this帖子,其中提供了MVC管道图表的链接,这将帮助您了解正在发生的事情。