添加控件及其事件动态
问题描述:
我在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" });
哪个应该返回创建的控件,然后您可以用设计器的相同方式进行连接。
编辑:或者你可以查找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>
基本上字符串生成了:“公共{0} {1} {get; set;}“,然后根据xml的值构建最终的字符串。编译器服务然后把它变成一个类。一旦课堂制作完毕,它可以存储以供将来使用。我做的另一个尝试是在网站项目中将代码文件从磁盘中运行,然后调用该站点以重新启动(这有效地重新编译了IIS在目录中找到的所有内容,包括您的新代码文件)。
可能性:)
谢谢, 我没有找到代的方式是合理的!有没有另一种技术来解决这个问题? – asker
我扩大了答案。我假设你有某种存储配置信息的数据存储 – 2011-10-07 00:23:48