2009-10-07 17 views
11

http://www.asp.net/learn/mvc/tutorial-39-cs.aspx"Bu özellik belirleyici eskidir, çünkü değeri şimdi ModelMetadata.Model'den türetilmiştir."

ASP.NET MVC uygulamasında bazı doğrulama uygulamak için yukarıdaki kılavuzu kullanıyoruz.

Bir satır numarası olmayan aşağıdaki hata This property setter is obsolete, because its value is derived from ModelMetadata.Model now. alıyoruz, yalnızca yeni bir mesaj oluşturmak için gönder düğmesine basıldığında patlar.

Biz nesneleri DBML

oluşturulur çünkü (yukarıdaki kılavuzun alt kısmına bakın) MetaData örneği kullanmak zorunda olan hataya neden olanlar hakkında herhangi bir öneriniz?

cevap

28

Yeni bir ModelBindingContext oluşturduğunuzda ve MVT 2 önizlemesinde 2 veya daha yüksek bir ModelType özelliği, ayarlamaya çalıştığınızda bu hatayı alırsınız. Eğer açıklandığı gibi

Ben MVC 2 önizleme 2 güncellendi
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; 
    } 

, ben aynı hata var: Örneğin, MVC eski sürümlerinde özel modeli ciltteki için bir birim test, aşağıdaki gibi bir kodu vardı . düzeltme bu bu kodu değiştirmek oldu: Ben ModelType atama kaldırdık

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; 
    } 

Not ve ModelMetadata bir atama ile değiştirilir. Visual Studio, hangi kodun aslında bu hatayı attığını söylemelidir.

+0

Şimdi bunu deneyeceğim, teşekkürler - Bir süredir burada sensiz kalırdım. Ancak bu bir hatadır? Yanlış yaptığımız bir şey mi? – LiamB

+0

Tıpkı Dll'si (Hat 47 DataAnnotationsModelBinder.cs) hatayı 'var innerContext = new ModelBindingContext() { Model = propertyDescriptor.GetValue (bindingContext.Model), ModelAdı = fullPropertyKey, ModelState = buldum eklemek bindingContext.ModelState, ModelType = propertyDescriptor.PropertyType, ValueProvider = bindingContext.ValueProvider }; ' – LiamB

+0

Kodunuz completley diferansiyel nesneleri kullanıyor gibi görünüyor? – LiamB

İlgili konular