ASP.NET检查控件是否位于正确的页面上

本文关键字:于正确 NET 检查 控件 是否 ASP | 更新日期: 2023-09-27 18:27:16

我正在尝试检查控件(指用户自定义控件*ascx)是否放在正确的页面上,并且我遇到了错误-如何解决

控制Page_Load:

    protected void Page_Load(object sender, EventArgs e)
    {
        ddl.enable = (Page as Online.MyPage);
    }

错误:

    Object reference not set to an instance of an object.

但如果我们从页面生命周期来看,这是可能的:

  Page: PreInit
  Control: Init
  Page: Init
  Page: InitComplete
  Page: PreLoad
  Page: Load
  Control: Load

ThanX

UDP:

我认为可能是这样的,但我认为这是一种错误的方式。

var v = Page as Online.MyPage;
if (v != null)
   ddl.enable = v;

UPD:

ddl.enable-表示下拉列表

 DropDownList ddList = new DropDownList();
 ddList.Enabled = y;

我不想通过属性来委派父页操作控件的权限,只想跨控件解决这个问题。

ASP.NET检查控件是否位于正确的页面上

Page as Online.MyPage将返回null,如果Page不能被强制转换为Online.MyPage。请参阅此处了解原因。

您想要做的是查看Page对象的类型是否继承了您的自定义Online.MyPage类。你可以这样做:

ddl.Enabled = Page.GetType().IsSubclassOf(typeof(Online.MyPage))

更新:

问题中给定的代码示例显示ddl.enable不是bool,而是某种类型的object。我的假设是,意图是基于ddl.enable的值来启用或禁用某些东西,因此我假设ddl.enable实际上被视为bool,而不是对象。如果ddl.enable是object类型,那么由于bool也是object,因此代码仍将编译。代码是否会毫无例外地执行将完全取决于使用ddl.enable所做的操作。

无论哪种情况,Page.GetType().IsSubclassOf(typeof(Online.MyPage))都可能是检测控件是否在特定类型页面上的最佳方式。

更新2:

既然ddl已经被澄清为DropDownList控件,我已经更新了我的代码片段,以便它基于Page类型启用或禁用DropDownList控件。