我试图按照 Darin Dimitrov 在这篇文章中的回答: How to create controls dynamic 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)”需要引用。
那么,我该怎么做才能使model.GetType()工作?
如何获取 ControllerContext 和 modelType?
如果有人知道如何将这段代码从 ASP .NET MVC 转换为 ASP .NET Core,我会非常感谢他的帮助。
先感谢您!