【问题标题】:ASP.NET: Controls are null when I try to change a propertyASP.NET:当我尝试更改属性时,控件为空
【发布时间】:2010-06-28 17:30:53
【问题描述】:
  1. 创建了一个用户控件。
  2. 在用户控件中,我在标记中有一个简单的控件,例如 Literal。
  3. 在用户控件的 Page_Load 中,我尝试更改在标记中创建的控件的属性,例如 Text。
  4. 控件为空。

我到底错过了什么?








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

【问题讨论】:

  • 你能提供一些代码示例吗?标记和 Page_load() 方法会很有帮助。
  • UserControl 是否加载?它加载正常,但文本没有改变?或者,UserControl 没有加载或出现空/空白?

标签: c# asp.net user-controls


【解决方案1】:

Page.LoadControl() 有两个重载,一个接受 Virtual Path,另一个接受 Type。 有时,在使用 Type 版本重载时,您会遇到这种行为。

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

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

【讨论】:

    【解决方案2】:

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

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

    在创建控件之后进行初始化,而不是在页面加载完控件内容之后。

    【讨论】:

    • 哦,有人能把这个选为正确答案吗? (它说我必须等待两天才能将我自己的答案投票为正确答案!我想我们不相信人们会解决他们自己的问题,嗯?:-P)
    【解决方案3】:

    我知道这是一个旧问题,但想谈谈我是如何解决我遇到的类似问题的。我有一个带有 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;
    }
    

    执行覆盖解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2010-10-07
      • 2010-11-17
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 2022-07-06
      相关资源
      最近更新 更多