用户控件c#.net中的公共方法

时间:2009-03-02 18:26:13

标签: c# asp.net user-controls

如何从页面中调用用户控件的公共方法?

我在页面上的OnInit中动态加载控件。任何想法?出于某种原因,我收到一个构建错误,指出该方法不存在,即使它是公开的。开始认为用户控件不值得所有麻烦。

5 个答案:

答案 0 :(得分:5)

你说过

Control fracTemplateCtrl = 
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

你需要说

FracTemplateCtrl fracTemplateCtrl =
   (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx")
fracTemplateCtrl.TestMethod();

请注意fracTemplateCtrl is声明为FracTemplateCtrl,因此visual studio知道它有TestMethod()。当它被声明为Control时,visual studio无法做出这样的假设。

答案 1 :(得分:1)

您是否正在将用户控件转换为正确的类型?

答案 2 :(得分:1)

没有示例代码,很难肯定地说,但我猜你需要将对UserControl的引用转换为自定义控件的特定类型。例如,如果您的UserControl类型为“PersonControl”,那么您的代码将如下所示:

PersonControl ctl = (PersonControl)LoadControl("PersonControl.ascx");
ctl.DoCustomMethod();

答案 3 :(得分:0)

如果您的类继承自UserControl,请确保在您访问它时,就像其他人所说的那样,您正在正确地投射它。例如:

public MyControl : UserControl
{
    public void MyMethod(){...}
}

在您的表单中:

private MyControl mycontrol = new MyControl();
private void MainForm()
{
    this.Controls.Add(mycontrol);

    InitializeComponent();
}

private void DoStuff()
{
    ((MyControl)mycontrol).MyMethod();
}

答案 4 :(得分:0)

迈克的回答是它是如何完成的,但Visual Studio在检测UserControl类时可能有点不稳定,并抱怨该类型不存在。在这些情况下,我必须在页面上添加<% @Reference %>标记以强制它识别,即使它可能在web.config中被引用。