DefaultModelBinder expone un método público: DefaultModelBinder.BindModel, y una cantidad de métodos protegidos disponibles para sobrescribir. Todos ellos enumerados here.
Además del modelo, estos métodos se refieren a propiedades solamente, no campos, como
- GetModelProperties,
- GetFilteredModelProperties,
- getPropertyValue,
- OnXYZValidating,
- OnXYZValidated,
- OnXYZUpdating,
- OnXYZUpdated,
- GetXYZValue,
donde XYZ
representa ya sea Model,
o Property/ies,
o ambos, y así sucesivamente.
Como puede ver, no hay ningún Fields
mencionado con estos nombres de ningún tipo. Como se explicó en Darin, el cuaderno no tolera ningún cambio directo en el estado del modelo. Por lo tanto, no Field
en sus métodos.
Y también, es posible que desee echar un vistazo a otra clase importante: ModelBindingContext. Una instancia de esta clase se pasa al BindModel,
y luego a BindSimpleModel,
y BindComplexModel,
dependiendo del tipo de modelo (string, int,
... se consideran simples, todo lo demás es complejo).
Así, este marco tiene las siguientes propiedades:
En otras palabras, no tiene medios para hacer referencia a los campos en su ViewModel a menos que no anule estas clases y tome medidas especiales para hacerlo.
Pero, una vez más, tenga cuidado con la lucha contra el marco, siempre es más fácil seguirlo en su lugar.
EDIT: La clase ModelMetadata contiene todos los datos necesarios para vincular el modelo. Sin embargo, su código no muestra ningún signo de campos, nombres de campos, etc. Solo se hace referencia a las propiedades y se accede a ellas. Por lo tanto, incluso si intenta heredar y anular DefaultModelBinder y ModelBinderContext, todavía no podrá acceder a la fiellds, no importa cuál sea su modificador de acceso es: pública, privada, etc.
Hope esto explica la mayor parte de ella.
Ok, pero para eso tienes los modificadores de acceso. Si no quiero que se establezca un campo directamente, simplemente lo declaro 'privado '. Las clases de Viewmodel normalmente son solo contenedores de datos y, en su mayoría, no contienen mucha lógica, así que pensé que podría estar bien usar campos públicos. – Jan
@ Jan, normalmente los campos deben ser privados. –
Y normalmente no debería tener lógica en los captadores de propiedades ... – gdoron