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

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

有帮助吗?

解决方案

你说过

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无法做出这样的假设。

其他提示

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

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

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

如果您的类继承自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();
}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top