2
有什麼辦法可以將UserControl的代碼存儲在數據庫表中,動態編譯它或從那裏加載它?意味着我從包含UserControl的完整代碼的數據庫中獲取字符串,然後將其添加到頁面中?我可以將Web UserControl ascx和代碼存儲在數據庫中並從那裏加載它嗎?
有什麼辦法可以將UserControl的代碼存儲在數據庫表中,動態編譯它或從那裏加載它?意味着我從包含UserControl的完整代碼的數據庫中獲取字符串,然後將其添加到頁面中?我可以將Web UserControl ascx和代碼存儲在數據庫中並從那裏加載它嗎?
幾個想法:
選項1:臨時文件(最簡單)
~/tmp/
(並給Web應用程序修改 & 創建權限對該目錄)保存用戶控件的內容到一個臨時文件:
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
。因此,您可以將整個頁面存儲在數據庫中並動態編譯它。
免責聲明:我不建議存儲控制器或數據庫中的網頁;它會增加維護,調試和安全成本。
我的大腦正在融化:) – 2011-08-16 06:17:23
@pst爲什麼?我目前正在使用Sharepoint,並且它也從數據庫中提取所有代碼。所以,它肯定有可能。 – teenup
它從數據庫加載用戶控件...?我確定他們在ControlTemplates中... – 2011-08-16 06:25:09