如何在呈现之前设置用户控件属性?

时间:2009-09-24 21:35:52

标签: asp.net events user-controls asp.net-3.5

我在页面上有一个用户控件(uc)。 uc公开了一些在父页面的Page_Load()事件上设置的属性,应该在用户控件加载时读取。

在从父页面设置任何属性之前,看起来uc的Page_Load()会触发。

我应该在什么事件中设置uc属性,以便在渲染时可以使用这些属性?

我使用ASP.NET 3.5和C#

P.S。我只是从我的旧代码中挖出一个解决方案:

在控件的Page_Load中执行:

Page.LoadComplete += delegate { LoadTheControl(); };

我仍然想听听你的想法。

5 个答案:

答案 0 :(得分:6)

您可以毫不费力地访问OnPreRender酒店。

答案 1 :(得分:3)

我自己今天下午遇到了这个问题。

我在UserControl上创建了一个名为LoadData()的公共方法,并在设置了数据所依赖的属性后从我的主机页面的Page_Load中调用它。

已添加 - 代码示例

在用户控件中:

public property SomeProp {get, set};

public void LoadData()
{
   // do work
}

并在主机页面的Page_Load中

myControl.SomeProp = 1;
myControl.LoadData();

答案 2 :(得分:3)

如果您以声明方式将usercontrol放在页面上,只需在那里设置属性。

<cc1:myUserControl MyProperty="1" />

如果要动态地将控件添加到页面,只需在将控件添加到主机页面的控件集合之前设置属性。在您致电Page.Controls.Add(myUserControl)之前,控件的所有生命周期事件都不会触发。

如果无法避免你现在所拥有的设置,并且父母必须在Page_Load中执行一些逻辑并且UC已经在那里,那么我会建议David Stratton发布的内容,但根据我的经验这通常标准化为Initialize()Init()

答案 3 :(得分:1)

那么, 答案都没有帮助我。 但是当手动设置事件InitComplete()的属性时,一切正常。 我的用户控件现在已启用,以便在我之前设置属性后读取属性。

答案 4 :(得分:0)

我遇到过类似的问题: -

我首先动态添加UserControl,然后尝试将值分配给控件的内部控件(用户控件中的文本框)。使用任何事件(如INIT或LOAD),控件会给我一个空引用异常,因为通过单步调试代码,控件尚未创建。

后来我发现只有通过dim语句声明控件时才会出现此问题;

Dim MyControl as new MyUserControl
Me.Panel1.Controls.add(MyControl)
MyControl.SetLabelText("My Name") 'Uses a method to set the label text on load.

另一方面,如果我按如下方式使用控件,它可以正常工作:

Dim MyControl as MyUserControl = LoadControl("MyUserControl.ascx")
Me.Panel1.Controls.add(MyControl)
MyControl.SetLabelText("My Label Text")