我需要一个模型绑定器来循环一个类型的所有属性(通过反射)并将值赋给该属性。我是这样做的:
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 +)
获得的数据的最佳方法是什么?
答案 0 :(得分:0)
答案是调用" ConvertTo"方法
var valueRaw = propValue.ConvertTo(prop.PropertyType);
entity.GetType().GetProperty(prop.Name).SetValue(entity, valueRaw);