为什么asp.net mvc模型绑定器读取视图模型属性?

时间:2016-08-06 02:00:04

标签: c# asp.net-mvc asp.net-core

当我在视图模型中的属性的getter上放置断点时,asp.net核心模型绑定正在读取我的属性值。这是在实际视图中使用视图模型之前。有没有理由这样做?模型绑定应该用于从值提供程序设置视图模型的属性,而不是从视图模型中读取它们。有办法防止这种情况吗?

编辑:由于没有提供易于复制的步骤,因此有投票要关闭此问题,因此这里是。在asp.net核心项目中创建以下控制器:

id

如果将断点放在getter中,并且测试控制器操作中有断点,您将看到在实际进入控制器操作以供视图使用之前访问getter。在这一点上,您的视图模型中的属性似乎不应该被读取。只是寻找关于为什么会发生这种情况的想法,以及是否有可能(或一个好主意)来防止这种行为。谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪个版本的MVC,但是在MVC版本5.2.3中,DefaultModelBinder会在绑定过程之前在绑定过程中为每个属性设置请求值之前调用模型类的getter。被调用的控制器方法。我不知道为什么会这样做,但是我能够通过基于原始的DefaultModelBinder源代码实现自定义模型绑定程序来更改该行为,该源代码删除了对getter的调用。

在此处查看更详细的说明和我的完整解决方案:https://stackoverflow.com/a/54431404/10987278

在您的评论中,您提到您已经有一个自定义模型活页夹,因此您也许可以从我的解决方案中添加BindProperty(...)覆盖来获得您想要的行为。