2013-05-02 63 views
1

所以我有一个函数renderWidget()default.aspx.cs。这个想法是将一个用户控件添加到一个页面。从CodeBehind传递用户控制变量和访问方法

public void renderWidget(string data) { 
    Control ctrl = Page.LoadControl("/widgets/widget.ascx"); 
    dataPanel.Controls.Add(ctrl); 
} 

这一切工作正常,可爱的小玩意。现在,在另一端,在用户控制,我在widget.ascx.cs下面的代码:

public class WidgetControl : System.Web.UI.UserControl 
{ 
    public string testString = ""; 
    public void test() { 
     Response.Write("test"); 
    } 

} 

的问题,当我尝试访问任何属性的用户控件出现。当我尝试将ctrl.test()ctrl.testString = "test"添加到default.aspx.cs时,出现错误“'System.Web.UI.Control'不包含'test'”的定义。我觉得这里可能有一些非常基本的东西。

任何帮助表示感谢,谢谢!

回答

1

你必须转换为正确的类型:

WidgetControl widget = (WidgetControl)ctrl; 
widget.testString = "Foo"; 
widget.test(); 

LoadControl回报Control而不是实际的类型你UserControl的。

+0

'无法找到类型或命名空间名称'WidgetControl'。'我在这里显然很愚蠢,显然我缺少一个步骤。对白痴抱歉。 – 2013-05-02 16:18:49

+0

@DeclanTyson:查看UserControl的名称空间,在页面顶部添加正确的“using”或使用完整的名称空间。 – 2013-05-02 16:21:34

+0

@Time Schmelter如何找到UserControl的名称空间? – 2013-05-02 16:29:58

1

您需要将您的实例投射到WidgetControl

+0

和@Tim Schmelter一样 - 我得到'无法找到类型或名称空间名'WidgetControl'。我觉得我有点厚,但是我做错了什么? – 2013-05-02 16:19:33