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

时间:2010-06-28 17:30:54

标签: c# asp.net user-controls

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









    (开始咆哮:我正在使用登录系统做所有这些奇特的事情,并使用AJAX等动态添加/修改控件,但我不能改变f'n静态控件的属性!我甚至不能谷歌这样的简单的问题,没有找到别的东西!在过去,我不得不动态生成整个血腥的页面,以避免这个愚蠢的简单问题。结束咆哮。)

3 个答案:

答案 0 :(得分:0)

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

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

编辑:作为一个FYI,这是因为用户控件的实际类型不是您所期望的。 ASP.NET类型“包装”用户控件的类型。

答案 1 :(得分:0)

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

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

初始化在控件完成后发生,但在页面完成加载控件之后不会发生。

答案 2 :(得分:0)

我知道这是一个旧版本,但想要了解我如何解决我遇到的类似问题。我有一个带有asp:Panel的用户控件,我试图在Page_Load期间设置可见性,但控件是空的。然后我注意到我的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;
}

执行覆盖修复了问题。