2013-10-15 103 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

你怎么能详细说明这个部分的东西? –

相关问题