Ответ 1
Вы получите эту ошибку при создании нового ModelBindingContext, а затем попытаетесь установить свойство ModelType в предварительном просмотре MVC 2 или выше. Например, в unit test для настраиваемого связующего объекта в более старых версиях MVC у меня был код вроде следующего:
internal static T Bind<T>(string prefix, FormCollection collection, ModelStateDictionary modelState) where T:class
{
var mbc = new ModelBindingContext()
{
ModelName = prefix,
ModelState = modelState,
ModelType = typeof(T),
ValueProvider = collection.ToValueProvider()
};
IModelBinder binder = new MyModelBinder();
var cc = new ControllerContext();
return binder.BindModel(cc, mbc) as T;
}
Когда я обновился до предварительного просмотра MVC 2, я получил ту же ошибку, что и вы описали. Исправление заключалось в том, чтобы изменить этот код на следующее:
internal static T Bind<T>(string prefix, FormCollection collection, ModelStateDictionary modelState) where T:class
{
var mbc = new ModelBindingContext()
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(T)),
ModelName = prefix,
ModelState = modelState,
ValueProvider = collection.ToValueProvider()
};
IModelBinder binder = new MyModelBinder();
var cc = new ControllerContext();
return binder.BindModel(cc, mbc) as T;
}
Обратите внимание, что я удалил назначение ModelType и заменил его назначением ModelMetadata. Visual Studio должна сказать вам, какая строка кода на самом деле бросает эту ошибку.