以编程方式使用UserControls

时间:2009-11-02 21:47:47

标签: c# asp.net dynamic user-controls

我有一个项目,我做了几个用户控件:一个图例和一个图例项。

在我的网页上,我正在检索要加载到LegendItem控件中的信息集合(设置基本文本和颜色信息)然后将这些项目添加到我的图例控件(图例控件上有一个面板,并且我在网页上引用了一个Legend用户控件。

我无法弄清楚如何正确获取LegendItem控件的句柄,以便我可以访问其属性并进行设置。

如果您需要帮助,我可以提供代码 - 但我被困住了,需要一些帮助!感谢您抽出宝贵时间阅读本文!

4 个答案:

答案 0 :(得分:1)

理解动态控件的关键是理解页面生命周期。您需要确保在page_init事件期间创建控件,以确保在服务器端正确处理控件。

可用于帮助您管理动态创建的控件的优秀控件是dynamic controls placeholder

答案 1 :(得分:1)

您可以使用LoadControl实例化用户控件。

然后设置你的属性。

然后将控件添加到您在Legend控件上的asp.net占位符控件。


LegendItem li = (LegendItem)LoadControl("LegendItem.aspx");
li.name = "bob"
legend.placeholder.controls.add(li);

答案 2 :(得分:0)

我不确定你想做什么。如果您只需要将控件(静态地)添加到您的页面,请按以下步骤操作:

  

<%@ Page Language =“C#”%>
     <%@ Register TagPrefix =“uc”TagName =“Spinner”Src =“〜\ Controls \ Spinner.ascx”%>

     < HTML>
     <身体GT;
     < form runat =“server”>
     < uc:Spinner id =“Spinner1”              RUNAT = “服务器”              MINVALUE = “1”              MaxValue =“10”/>
     < /形式>
     < /体>

一旦你拥有了它,在后面的代码中你可以通过ID找到控件,将它转换为你的类型,然后做任何事情。顺便说一句,MinValue和MaxValue是在控件实现上定义的属性。

现在,如果要动态创建控件实例,则需要使用页面的LoadControl方法。此方法返回控件的实例,但要对其执行任何操作,您需要将其添加到页面的控件集合中,如下所示:

page.Controls.Add(mycontrol)

您可以在OnRender事件之前的页面生命周期中的任何位置执行此操作。请记住,一旦你这样做,控件将开始追赶 - 它将被推到它错过的所有页面生命周期事件。另请注意,如果页面被回发,您需要确保控件的位置与处理视图状态时的控件完全相同。

作为旁注,我认为做这种工作服务器方面有点过时了。你最好用JQuery和类似的东西做点什么

答案 3 :(得分:0)

这太奇怪了。我的aspx.cs页面无法识别我的控件,除非我给用户控件一个命名空间。现在我能够创建对象,正确投射等等。

感谢大家的尝试。