动态添加控件及其事件

本文关键字:事件 控件 添加 动态 | 更新日期: 2023-09-27 18:10:08

我在asp.net中有一个问题

我正在开发一个网站在visual studio 2008使用(asp.net/vb)

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

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

换句话说,我想让任何CMS(例如Joomla)。cms允许我们创建新页面并添加控件,然后保存它们…

我想很多,我找到了一个解决方案,使代码生成器(从a ->Z),生成的页面和它的代码背后(apsx文件&aspx.vb文件)

有什么工具或解决方案可以帮助我比我的解决方案??

动态添加控件及其事件

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

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

它将返回创建的控件,然后您可以以与设计器相同的方式连接该控件。

编辑:或者你可以查找编译器服务。我曾经做过一个程序,它把它的基于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在目录中找到的所有代码文件,包括您的新代码文件)。

可能性:)