我在asp.net中遇到问题
我正在使用(asp.net/vb)
在visual studio 2008中开发一个网站我必须允许注册用户构建页面并添加已由同一用户定义的控件。
我的问题是如何动态构建此页面?
换句话说,我想像任何CMS一样(例如 Joomla )。 CMS允许我们制作新页面并添加我们的控件然后保存它们......
我认为很多,我通过制作代码生成器(来自A-> Z)生成页面及其代码隐藏(apsx文件和aspx.vb文件)来找到解决方案
是否有任何工具或解决方案可以比我的解决方案更好地帮助我?
感谢任何帮助。
答案 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在目录中找到的所有内容,包括新的代码文件)。
可能性:)