动态添加控件及其事件

时间:2011-10-01 23:43:15

标签: c# asp.net vb.net visual-studio-2008

我在asp.net中遇到问题

我正在使用(asp.net/vb)

在visual studio 2008中开发一个网站

我必须允许注册用户构建页面并添加已由同一用户定义的控件。

我的问题是如何动态构建此页面?

换句话说,我想像任何CMS一样(例如 Joomla )。 CMS允许我们制作新页面并添加我们的控件然后保存它们......

我认为很多,我通过制作代码生成器(来自A-> Z)生成页面及其代码隐藏(apsx文件和aspx.vb文件)来找到解决方案

是否有任何工具或解决方案可以比我的解决方案更好地帮助我?

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果查看aspx页面的设计器cs文件,您会注意到设计器在运行时将对象添加到页面的控件中。如果需要,您可以在运行时为编译器服务生成页面的类,或者您可以创建一个函数,通过它的类型名称创建控件的实例,然后将该对象添加到页面。

Type.GetType("myControl").GetConstructor(new Type[] { typeof(string) }).Invoke(new object[] { "myString" });

哪个将返回创建的控件,然后您可以按照与设计者相同的方式进行连接。

编辑:或者您可以查找compiler services。我曾经创建了一个程序,它接受了基于xml的配置文件,并使用字符串构建器将其转换为可编译的.cs文件。然后我使用编译器服务将该文本编译成我执行的类。它开始像这样生活:

using System;
public class MyConfigClass
{
        {0}
        {1}
        {2}
    public MyConfigClass()
    {
    }
}

并最终像这样

using System;
public class MyConfigClass
{
    public string FirstName{
        get;
        set;
    }
    public string LastName{
        get;
        set;
    }
    public string Age {
        get;
        set;
    }

    public MyConfigClass()
    {

    }
}

基于此信息

<?xml version="1.0" encoding="utf-8"?>
<ConfigProperties>
  <Property>
    <Name>FirstName</Name>
    <Value>John</Value>
  </Property>
  <Property>
    <Name>LastName</Name>
    <Value>Smith</Value>
  </Property>
  <Property>
    <Name>Age</Name>
    <Value>12</Value>
  </Property>
</ConfigProperties>

基本上,字符串构建器采用:“public {0} {1} {get; set;}”为每个属性,然后根据xml的值构建最终字符串。编译器服务然后把它变成了一个类。课程完成后,可以存储以备将来使用。我做的另一个尝试是在网站项目中运行代码文件磁盘,然后调用该站点重新启动(这有效地重新编译了IIS在目录中找到的所有内容,包括新的代码文件)。

可能性:)