我已尝试遵循达琳·迪米特洛夫(Darin Dimitrov)在此职位上的回答: How to create controls dynamically in MVC 3 based on an XML file。但是在ASP .NET Core(特别是ASP .NET Core 2)中,没有DefaultModelBinder,因此我必须修改自定义模型绑定程序代码才能与ASP.NET Core一起使用。
实际上我的代码是:
public class ControlModelBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var type = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Type");
object model = null;
switch (type.FirstValue)
{
case "TextBox":
{
model = new TextBoxViewModel();
break;
}
case "CheckBox":
{
model = new CheckBoxViewModel();
break;
}
case "DropDownList":
{
model = new DropDownListViewModel();
break;
}
default:
{
throw new NotImplementedException();
}
};
bindingContext.ModelMetadata = ModelMetadataProvider.GetMetadataForType(model.GetType());
bindingContext.Model = model;
return Task.CompletedTask;
}
}
我实际上遇到的问题是ModelMetadataProvider.GetMetadataForType向我显示错误:
非静态字段,方法或属性需要参考 'ModelMetadataProviderGetMetadataForType(Type)'。
那么,我该怎么做才能使模型工作。GetType()?
如何获取ControllerContext和modelType?
如果有人知道如何将这段代码从ASP .NET MVC转换为ASP .NET Core,我真的很感谢他的帮助。
提前谢谢!