我正在使用ASP.NET MVC3,我想知道默认的模型绑定器绑定到公共属性,但不绑定到公共字段.
通常我只是用属性定义模型类,但有时我使用一些包含一些字段的预定义类.每次我必须调试并记住模型绑定器只是不喜欢字段.
问题:背后的原因是什么?
解决方法
but sometimes i use some predefined classes which contains some fields
虽然我无法回答你关于默认模型绑定器仅适用于属性的确切原因的问题(我的猜测是它以这种方式尊重更好的封装并避免修改对象的内部状态,这是字段所代表的)我可以说你是什么调用预定义类通常应该是视图模型.您应始终在控制器操作中使用视图模型.这些视图模型是专门定义的类,以满足给定视图的要求.
所以回到主要观点:字段应该只在给定的类中修改.不应该直接从外面访问它们.它们代表并保持着班级的内部状态.另一方面,属性应该是暴露给外部世界的.想象一下,在属性getter / setter中你有一些自定义逻辑.通过直接修改字段,此自定义逻辑将被破坏,并可能使对象进入不一致状态.