代码之家  ›  专栏  ›  技术社区  ›  om252345

动态呈现控件,从字符串/XML文件确定类型?

  •  1
  • om252345  · 技术社区  · 16 年前

    在ASP.NET应用程序中,我希望动态呈现几个控件,这些控件的属性来自XML文档。关键在于:我希望能够动态地确定控件的类型。因此,在我的XML文档中,我有如下内容:

        <control>
        <id>myControl1</id>
        <type>CheckBox</type>
        <text>Text For This Control</text>
        </control>
    

    只要我手动将新控件实例化为复选框,就属性而言,我可以让一切正常工作……但我似乎不知道如何使其成为复选框,而不是文本框或基于XML信息的任何东西。。。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Johan Öbrink    16 年前

    您可能希望能够控制超出控制类型的输出。我的建议是:

    public interface IControlProvider {
        public Control GetControl(XmlElement controlXml);
    };
    
    public class ControlProviderFactory : IControlProvider {
        private Dictionary<string,IControlProvider> providers = new Dictionary<string,IControlProvider>();
    
        public ControlProviderFactory() {
            //Add concrete implementations of IControlProvider for each type
        }
    
        public Control GetControl(XmlElement controlXml) {
            string type = (controlXml.SelectSingleNode("type") as XmlElement).InnerText;
            if(!providers.ContainsKey(type) throw new Exception("No provider exists for " + type);
            return providers[type].GetControl(controlXml);
        }
    }
    

    您还可以添加ReflectionControlProvider作为非注册类型的备用,并允许该程序使用Activator.CreateInstance,而不是在遇到未知的提供程序类型时引发异常。通过这种方式,您可以在渲染的特定控制和动态创建方面获得最大的灵活性。

        2
  •  1
  •   Mehrdad Afshari    16 年前

    你可以做一个 Dictionary<string, Type> Activator.CreateInstance .