【问题标题】:How to use a web user control in code only (no rendering)?如何仅在代码中使用 Web 用户控件(无渲染)?
【发布时间】:2012-08-03 20:17:18
【问题描述】:

我有一个包含面板和其他 gui 控件的用户控件。它在呈现网页时与任何用户控件一样使用。但是,我需要使用它的新实例并仅在代码中使用它而不渲染它,因为它具有我想要使用的业务逻辑。但是,只要在代码中引用 gui 控件,它就会在运行期间出现对象空引用错误,例如:pnlSomePanel.Visible = true;

如何仅在代码中使用用户控件(不渲染)?使用 .NET 4.0。

【问题讨论】:

  • 这听起来像是一个责任分离的案例。我建议重构您的代码,以便面板中的逻辑与面板以及您现在尝试调用它的位置分开并可调用。
  • 代码并非特定于面板。代码参考 gui 对象。 uc 有调用其他方法的方法,它们都使用 uc 中的属性,所以 uc 可以作为一个整体使用。我没有资源来重构这个大 uc。我只需要一个创可贴解决方案来仅在代码中使用 uc。否则我必须复制我不想做的代码。

标签: c# asp.net user-controls


【解决方案1】:

从技术上讲,您应该能够创建代码隐藏类的新实例(假设是 asp.net Web 应用程序而不是网站)。

但是,如果该用户控件中嵌入了业务逻辑,我建议将其移动到单独的类中,或者将业务逻辑公开为带有一组适当参数的静态方法。

【讨论】:

    【解决方案2】:

    这个怎么样...

    在页面上添加对您的模块的引用。

    <%@ Reference Control="~/modules/MyModule.ascx" %>
    

    然后,您可以在后面的代码中使用模块的类名创建该模块的实例。

    modules_MyModule ctrl = LoadControl("~/modules/MyModule.ascx") as modules_MyModule;
    ctrl.SomeMethod();
    

    下一步将其添加到父容器中,但如果您跳过该步骤,您应该在后面的代码中仍然有一个功能对象。不完全确定它是否会起作用,但理论上应该会。

    【讨论】:

      猜你喜欢
      • 2014-06-22
      • 2011-12-25
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2017-09-13
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多