C# 如何使用自动类型转换创建模型绑定器
我需要一个模型绑定器,它循环一个类型的所有属性(通过反射),并将值赋给该属性。我是这样做的:C# 如何使用自动类型转换创建模型绑定器,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我需要一个模型绑定器,它循环一个类型的所有属性(通过反射),并将值赋给该属性。我是这样做的: public class ModuleModelBinder : DefaultModelBinder { protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType) {
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+)获取的数据转换为正确类型的最佳方法是什么?答案是调用“ConvertTo”方法
var valueRaw = propValue.ConvertTo(prop.PropertyType);
entity.GetType().GetProperty(prop.Name).SetValue(entity, valueRaw);