DefaultModelBinder предоставляет публичный метод:
DefaultModelBinder.BindModel и ряд защищенных методов, доступных для переопределения. Все они перечислены здесь .
Помимо модели, этот метод относится только к свойствам, а не к полям, как
- GetModelProperties
- GetFilteredModelProperties,
- GetPropertyValue
- OnXYZValidating
- OnXYZValidated
- OnXYZUpdating
- OnXYZUpdated
- GetXYZValue,
, где XYZ
означает Model,
или Property/ies,
или оба, и т. Д.
Как видите, с этими именами не упоминается Fields
. Как объяснил Дарин , связыватель не допускает прямых изменений в состоянии модели. Следовательно, нет Field
в его методах.
Также вы можете взглянуть на другой важный класс: ModelBindingContext . Экземпляр этого класса передается в BindModel,
, а затем в BindSimpleModel,
и BindComplexModel,
в зависимости от типа модели (string, int,
... считаются простыми, все остальное сложно).
Итак, этот контекст имеет следующие свойства:
Другими словами, у вас нет средств для ссылки на поля в вашей ViewModel, если вы не переопределяете эти классы и не предпринимаете специальных действий для этого.
Но опять же, остерегайтесь борьбы с фреймворком, за ним всегда легче следовать.
РЕДАКТИРОВАТЬ: Класс ModelMetadata содержит все данные, необходимые для привязки модели. Однако его код не показывает никаких признаков полей, имен полей и т. Д. Только ссылки на свойства и доступ к ним. Таким образом, даже если вы попытаетесь унаследовать и переопределить DefaultModelBinder и ModelBinderContext , вы все равно не сможете получить доступ к полям, не обращая внимания на то, что является их модификатором доступа: public, private и т. Д.
Надеюсь, это объясняет большую часть этого.