Подтвердить что ты не робот

"Этот установщик свойств устарел, потому что его значение получено из ModelMetadata.Model сейчас".

http://www.asp.net/learn/mvc/tutorial-39-cs.aspx

Мы используем приведенное выше руководство для реализации некоторой проверки в нашем приложении ASP.NET MVC.

Мы получаем следующую ошибку This property setter is obsolete, because its value is derived from ModelMetadata.Model now., которая не имеет номера строки, она просто взрывается при нажатии кнопки отправки, чтобы создать новое сообщение.

Нам нужно использовать пример MetaData (см. нижнюю часть руководства выше), потому что объекты сгенерированы в DBML

Любые предложения о том, что вызывает ошибку?

4b9b3361

Ответ 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 должна сказать вам, какая строка кода на самом деле бросает эту ошибку.