«Этот установщик свойства устарел, потому что его значение теперь получено из ModelMetadata.Model». - PullRequest
11 голосов
/ 07 октября 2009

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

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

1 Ответ

28 голосов
/ 07 октября 2009

Вы получите эту ошибку, когда создадите новый ModelBindingContext, а затем попытаетесь установить свойство ModelType, в MVC 2 Preview 2 или выше. Например, в модульном тесте для пользовательского связующего компонента более старые версии 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 preview 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 должна сообщить вам, какая строка кода на самом деле выдает эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...