ASP.NET检查控件是否正确页面

时间:2014-10-21 15:20:36

标签: c# asp.net reference custom-controls

我正在尝试检查控件(意味着用户自定义控件*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;

我不想通过属性委托父页面进行操作控制,只想跨控件解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果无法将Page转换为Online.MyPage,

Page as Online.MyPage将返回null。 See here有关原因的解释。

您要做的是查看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控件,我已更新了我的代码段,以便根据页面类型启用或禁用DropDownList控件。