代码之家  ›  专栏  ›  技术社区  ›  Justin808

如何在不注册控件的情况下访问用户控件的字段和方法?

  •  2
  • Justin808  · 技术社区  · 15 年前

    除了注册一个创建并添加到其中一个页面的自定义控件之外,这一切都适用。我可以在Page.LoadControl中添加控件,但是我不能将其转换为访问任何内容的正确类型。

    如何从代码本身中添加对类的引用?

    2 回复  |  直到 11 年前
        1
  •  2
  •   Rex M    15 年前

    如果您不提前知道控件的特定类型,这是不可能的。类必须派生自 UserControl ,所以你可以把它投给 用户控件 你可以进入 all the methods and properties on that class . 如果有一些特殊的信息或功能需要所有控件都具有,并且您需要能够假设这些信息或功能总是存在的,那么您就必须编写自己的类来派生它们 用户控件 ,并要求所有自定义控件从中派生:

    //all custom controls must inherit from this
    public abstract class SpecialControlBase : UserControl
    {
        public abstract void DoSomethingSpecial();
    }
    

    然后可以在加载时将所有控件强制转换为 SpecialControlBase ,并且可以访问 DoSomethingSpecial 方法。

    但对于运行时加载的类的最特定成员,请考虑一下-如果我编写自己的控件 RexsUserControl 把它扔进 你的 应用程序,您不可能知道我在控件上放置了哪些方法和字段,所以您不能编写任何专门引用这些成员的代码。

        2
  •  1
  •   Dakine83    15 年前

    Rex M,如果您在ASPX页上注册控件,您可以将控件强制转换到后面的代码上。

    在ASPX中:

    <%@ Register TagPrefix="Mine" TagName="Ctrl" Src="~/Test/User/Controls/UserCtrl.ascx" %>
    

    然后,在ASPX.CS中:

    User_Controls_UserCtrl myUserCtrl = LoadControl("~/Test/User/Controls/UserCtrl.ascx");
    

    但是,如果不先在ASPX中注册控件,则会出现以下错误:

    CS0246:找不到类型或命名空间名称“User\u Controls\u UserCtrl”(是否缺少using指令或程序集引用?)

    推荐文章