2012-01-30 92 views
4

如何在ASP.NET中动态添加页面上的用户控件?如何在ASP.NET的运行时添加用户控件?

我有ID="contentData"一个div和几个控件

  • one.ascx
  • two.ascx
  • three.ascx

现在我已经创建了一个页面default.aspx,这可能通过以下方式之一获取查询字符串中的参数:

default.aspx?val=one 
default.aspx?val=two 
default.aspx?val=three 

我正在从

Request.QueryString["val"] 

价值现在我该怎样加载在这个特定的控制?

<div ID="controlData"></div> 

回答

14

在你的aspx

<div id="div1" runat="server"> 

</div> 

在Page_Load中

UserControl uc = (UserControl)Page.LoadControl("test.ascx"); 
    div1.Controls.Add(uc); 

所有你需要做的是让你的div服务器通过添加RUNAT = “服务器” 的约束,并在代码隐藏使用Page.LoadControl出去并取出你的用户控件,然后使用div的控件将它添加到你的div。添加

+3

也许也可以用Panel替换该div,以便于与服务器上的实例进行映射(在某些情况下,VS doesn'当runat = server被添加到html元素时,会自动生成一个成员)。基于来自查询的值构建到ascx的路径。验证或换行try-catch;处理不存在。对于通用控件放置,通过以“〜”字符开始(例如“〜/ controls /”+ this.Request.QueryString [“val”] +“.ascx”)来构建路径 - 但是,再次验证查询中的值。 – 2012-01-30 19:42:19

+0

我第二次验证查询的值。 – 2012-01-31 05:07:23

+0

阅读这些答案和一些文章后,我现在能够做得更好,Page_Init()是我必须应用代码的功能,但是我需要在!Page.IsPostBack中编写代码吗?如果是,为什么这个功能是用户? – Ahmed 2012-01-31 11:56:46

1

使用页面的LoadControl方法来做到这一点编程:

http://msdn.microsoft.com/en-us/library/t9ecy7tf.aspx

另外,如果你的目的是将其添加到div,确保你通过添加div的服务器控件runat =“server”中的标记

+1

使用〜度tidle的...或使用[ASP.NET面板](http://msdn.microsoft .com/en-us/library/system.web.ui.webcontrols.panel.aspx),它与具有'runat = server'的div基本相同。 – 2012-01-30 19:18:31

0

我有点不清楚你在问什么,所以请原谅我,如果这不回答这个问题。

假设可能的值是预先知道的,并且数字是适度的 - 就像您的示例中的三个一样 - 最简单的方法是将表单中的所有控件包含在“visible = false”中,然后在你想要的那个Load方法设置可见为真。

如果可能性的数量非常大,或者它是动态的,这样您甚至不知道编码时的可能性是什么,那么您可以放入一个包装对象,比如div,并添加项目到其“控制”属性。但是,如果可能的话,我会尽量避免这种情况,因为这很难维护:未来的程序员甚至不知道屏幕上可能存在哪些控件。

+0

没有数据是动态的,将从数据库加载,所以我不能加载和可见的错误... – Ahmed 2012-01-31 11:32:03

相关问题