我正在尝试检查控件(意味着用户自定义控件*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;
我不想通过属性委托父页面进行操作控制,只想跨控件解决这个问题。
答案 0 :(得分:0)
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
控件。