【问题标题】:Public Methods inside User control c# .net用户控件c#.net中的公共方法
【发布时间】:2009-03-02 18:26:13
【问题描述】:

如何在页面内调用用户控件的公共方法?

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

【问题讨论】:

  • @gnomixa:你是怎么打电话的?它是一种对象吗?如果你是动态创建的,那对我来说就是反射,在这种情况下,你也必须通过反射来调用方法,除非该方法位于已知接口(基类或接口)上。

标签: c# asp.net user-controls


【解决方案1】:

你说过

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

【讨论】:

  • @gnomixa:没问题。请注意,如果您发布带有问题的代码,您会更快地得到答案! ;]
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我尝试过强制转换,但这也不起作用: Control fracTemplateCtrl = (FracTemplateCtrl)LoadControl("FracTemplateCtrl.ascx"); Form.Controls.Add(fracTemplateCtrl); Response.Write(fracTemplateCtrl.TestMethod());错误是找不到TestMethod
    • 您的 fracTemplateCtrl 还需要是 FracTemplateCtrl 类型,除了演员表。此注释中的代码试图在 Control 类型的变量上调用 TestMethod。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 2012-02-11
        • 2012-06-10
        相关资源
        最近更新 更多