2013-10-15 151 views
1

我有一個存儲在DB中的字符串爲"<asp:panel id='test' runat='server' ></asp:panel>"。 我試圖讓這個數據和put it in a div which have runat="server" in it using innerHtml property.動態呈現Asp.net服務器控件

protected void Page_Load(object sender, EventArgs e) 
{ 
    Layouts.InnerHtml = GetTemplate(); 
} 

public string GetTemplate() 
{ 
    CompassModel.Layout Layout; 
    using (CompassEntities db = new CompassEntities()) 
    { 
     Layout = (from q in db.Layouts 
         where q.LayoutID == 1 
         select q).SingleOrDefault(); 
    } 

    return Layout.LayoutHTML; 
} 

當我試圖訪問使用findcontrol()方法返回null這個動態添加面板。

是否有任何方式來渲染它,以便我可以在運行時訪問面板?

+1

誰給你的想法來存儲'的'在DB和添加它在其他控制?你想要解決什麼問題? –

+0

我在設計頁面中有很多行。所以它需要花費很多時間來加載。 –

+0

將其簡單地移動到數據庫是一個最糟糕的想法。無論如何,最終的輸出將呈現爲「HTML」。無論你是簡單地將更多的負載(數據庫調用),並試圖讓你的網站更重。開始使用'Ajax' –

回答

3

你必須將asp服務器控件看作對象而不是標記。一旦對象呈現爲html,標記就由.net處理。

因此,只需將.net標記添加到頁面中,不會給您所需的效果。

您需要做的是創建一個新的面板對象,並將其添加到placeholer,panel或任何其他控件的控件集合中,這些控件將允許您添加到其集合中。

這裏就是我說的一個例子約

pnlContainer.Controls.Add(new Panel{ID = "test"});

+0

我有很多不同的控件和不同的設計。 –

+0

你正在做的事情不會奏效。您必須動態地將控件添加到集合中,或者創建頁面的各個部分並在頁面呈現之前顯示/隱藏它們。這將有助於加快加載時間。 – Smeegs

+0

你怎麼能詳細說明這個部分的東西? –

相關問題