如何使用自动类型转换创建模型绑定器

时间:2015-01-23 17:40:30

标签: c# asp.net asp.net-mvc

我需要一个模型绑定器来循环一个类型的所有属性(通过反射)并将值赋给该属性。我是这样做的:

public class ModuleModelBinder : DefaultModelBinder
    {
        protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
        {

            var m = UtilityModuli.GetAllVociModuli().Where(x => x.TableName == "Materiali").FirstOrDefault();

            var entity = m.Tipo.GetConstructor(new Type[] { }).Invoke(new object[] { });

            foreach (var prop in m.Tipo.GetProperties())
            {
                var propValue = bindingContext.ValueProvider.GetValue("Row."+prop.Name);
                if (propValue != null && !string.IsNullOrEmpty(propValue.AttemptedValue))
                {
                    var value = propValue.AttemptedValue;
                    entity.GetType().GetProperty(prop.Name).SetValue(entity, value);
                }
            }

            bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => entity, entity.GetType());
            return entity;
        }
    }

但是当我尝试为int设置值时,我得到一个错误,因为我尝试输入一个字符串。

转换我从正确类型bindingContext.ValueProvider.GetValue ("Row." Prop.Name +)获得的数据的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

答案是调用" ConvertTo"方法

var valueRaw = propValue.ConvertTo(prop.PropertyType);
entity.GetType().GetProperty(prop.Name).SetValue(entity, valueRaw);