代码之家  ›  专栏  ›  技术社区  ›  roman m

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

  •  4
  • roman m  · 技术社区  · 15 年前

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

    似乎UC的page_Load()在父页设置任何属性之前触发。

    在什么事件上,我应该设置UC属性,以便在呈现时使用这些属性?

    我使用ASP.NET 3.5和C#

    另外,我刚刚从我的旧代码中找到了一个解决方案:

    在控件的“加载”页中,执行以下操作:

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

    不过,我还是想听听你的想法。

    5 回复  |  直到 12 年前
        1
  •  6
  •   rick schott    15 年前

    您可以在不使用任何技巧的情况下访问预渲染的属性。

        2
  •  3
  •   David    15 年前

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

    我在名为load data()的用户控件上创建了一个公共方法,并在设置了数据所依赖的属性之后从宿主页面的页面加载中调用它。

    添加-代码示例

    在用户控件中:

    public property SomeProp {get, set};
    
    public void LoadData()
    {
       // do work
    }
    

    在主页上加载

    myControl.SomeProp = 1;
    myControl.LoadData();
    
        3
  •  3
  •   womp    15 年前

    如果要声明性地将UserControl放到页面上,只需在那里设置属性。

    <cc1:myUserControl MyProperty="1" />
    

    如果要动态地向页面添加控件,只需在将控件添加到宿主页面的控件集合之前设置属性。在调用之前,控件的任何生命周期事件都不会激发 Page.Controls.Add(myUserControl) .

    如果现在无法避免设置,并且父级必须在页面加载中执行某些逻辑,并且UC必须已经存在,那么我将建议David Stratton发布什么,但根据我的经验,这通常是标准化的,可以称为 Initialize() Init() .

        4
  •  1
  •   Charles    12 年前

    好, 没有一个答案能帮助我。 但是当手动设置事件initcomplete()的属性时,一切都正常。 我的用户控件现在可以在我设置属性后(而不是之前)读取属性。

        5
  •  0
  •   gouderadrian    12 年前

    我也遇到过类似的问题:

    我首先动态添加一个用户控件,然后尝试将值赋给控件的内部控件(用户控件中的文本框)。使用任何事件(如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")
    
    推荐文章