"此属性设置器已过时,因为它的值现在来自ModelMetadata.Model."

Lia*_*amB 11 validation asp.net-mvc

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中生成的

有关导致错误的原因的任何建议?

Cra*_*ntz 28

在创建新的ModelBindingContext然后尝试在MVC 2预览2或更高版本中设置ModelType属性时,您将收到此错误.例如,在旧版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;
    }
Run Code Online (Sandbox Code Playgroud)

当我更新到MVC 2预览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;
    }
Run Code Online (Sandbox Code Playgroud)

请注意,我已删除了ModelType的赋值,并将其替换为对ModelMetadata的赋值.Visual Studio应该告诉您哪行代码实际上是在抛出此错误.