在ASP .NET Core中动态添加控件

时间:2018-08-14 08:38:31

标签: asp.net-mvc asp.net-core defaultmodelbinder

我已尝试遵循达琳·迪米特洛夫(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,我真的很感谢他的帮助。

提前谢谢!

0 个答案:

没有答案