有没有什么方法可以将UserControl的代码存储在数据库表中,动态编译或从那里加载?意味着我从数据库中获取一个字符串,其中包含完整的UserControl代码,然后将其添加到页面中?
答案 0 :(得分:1)
一些想法:
选项1:临时文件(最简单)
~/tmp/
(并将Web应用程序修改& 创建对该目录的权限)将UserControl内容保存到临时文件:
string userControlContents = /* get user control contents from database */;
string path = Server.MapPath("~/tmp/2011081612332423.ascx");
System.IO.File.WriteAllText(path, userControlContents);
加载用户控件:
Control c = UserControl.LoadControl("~/tmp/2011081612332423.ascx")
将用户控件添加到所需的页面:
this.Controls.Add(c);
选项2:HttpHandler
Response
流
然后按选项1
中的方式加载控件Control c = UserControl.LoadControl("~/UserControlFromDB.ascx?id=392")
id=NNN
更改)。 URL重写可能会解决此问题。选项3:编译页面而不仅仅是控件:
BuildManager.CreateInstanceFromVirtualPath()
从虚拟路径编译ASP.NET中的Page
。因此,您可以将整个页面存储在数据库中并动态编译。
免责声明:我不建议在数据库中存储控件或页面;它会增加维护,调试和安全成本。