繁体   English   中英

ASP.NET:当我尝试更改属性时,控件为空

[英]ASP.NET: Controls are null when I try to change a property

  1. 创建了一个用户控件。
  2. 在用户控件中,我在标记中有一个简单的控件,如Literal。
  3. 在用户控件的Page_Load中,我尝试在标记中创建的控件上更改诸如Text之类的属性。
  4. 控制为空。

我到底想念什么?









(开始:我正在使用登录系统来做所有这些花哨的事情,并使用AJAX来动态地动态添加/修改控件,等等,但是我无法更改f'n静态控件的属性!我什至无法使用Google这样的控件一个简单的问题,却找不到其他东西!过去,我不得不动态生成整个血腥的页面,以避免出现这个愚蠢的简单问题。

我知道这是一个古老的问题,但想了解一下我如何解决类似的问题。 我有一个用户控件,上面带有一个asp:Panel,试图在Page_Load期间设置可见性,但是控件显示为null。 然后,我注意到我的Page_Load定义如下所示:

protected void Page_Load(object sender, EventArgs e)
{
   _myControl.visible = true;
}

实际上,我需要定义如下所示:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    _myControl.visible = true;
}

进行覆盖可解决此问题。

Page.LoadControl()有两个重载,一个重载接受虚拟路径,另一个重载类型。 有时,当使用Type版本重载时,您会得到这种行为。

如果可能,尝试使用LoadControl的虚拟路径版本。

编辑:仅供参考,这是因为用户控件的实际类型不是您期望的那样。 ASP.NET可以“包装”用户控件的类型。

在分析页面执行顺序后,我想出了一种方法( http://msdn.microsoft.com/en-us/library/ms178472.aspx )。

protected void Page_Init(object sender, EventArgs e)
{
   literalGameName.Text = myGame.Name;
}

初始化是在控件完成后发生的,而不是在页面加载完控件后完成的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM