2011-10-01 129 views
1

我在asp.net問題添加控件及其事件動態

我正在開發一個網站在使用Visual Studio 2008(asp.net/vb)

我必須讓註冊用戶構建頁面並添加已由同一用戶定義的控件。

我的問題是如何動態地構建這個網頁?

換句話說,我想製作像任何CMS(例如Joomla)。 CMS允許我們創建新頁面並添加我們的控件,然後保存它們...

我想很多,我找到了一個解決方案,通過生成代碼生成器(從A-> Z)生成頁面及其代碼 - 背後(apsx文件& aspx.vb文件)

是否有任何工具或解決方案能比我更好的解決方案幫助我嗎?

任何幫助表示讚賞。

回答

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> 

基本上字符串生成了:「公共{0} {1} {get; set;}「,然後根據xml的值構建最終的字符串。編譯器服務然後把它變成一個類。一旦課堂製作完畢,它可以存儲以供將來使用。我做的另一個嘗試是在網站項目中將代碼文件從磁盤中運行,然後調用該站點以重新啓動(這有效地重新編譯了IIS在目錄中找到的所有內容,包括您的新代碼文件)。

可能性:)

+0

謝謝, 我沒有找到代的方式是合理的!有沒有另一種技術來解決這個問題? – asker

+0

我擴大了答案。我假設你有某種存儲配置信息的數據存儲 – 2011-10-07 00:23:48