updateppanel . update()方法的事件处理程序

本文关键字:事件处理 程序 方法 update updateppanel | 更新日期: 2023-09-27 18:12:33

我有两个UpdatePanel在我的Web-form。都是UpdateMode="Conditional"。UpdatePanel1中的异步触发器触发UpdatePanel2.Update()事件。

我想在UpdatePanel2每当他的update()方法被触发时,做一些事情(比如根据一些标准动态加载一些用户控件)。

我该怎么做呢?

编辑:这是我需求的简化版本。UpdatePanel2.Update()方法可以从任何地方触发,比如MasterPage和... .doing some stuff不只是加载user-control

updateppanel . update()方法的事件处理程序

检查这个答案:如何知道哪个UpdatePanel导致部分PostBack?

你也可以使用这样的方法,而不实现自己的UpdatePanel控件继承自已有的反射:

private static PropertyInfo RequiresUpdateProperty;
protected void Page_Init(object sender, EventArgs e)
{
    RequiresUpdateProperty = RequiresUpdateProperty?? typeof(UpdatePanel).GetProperty("RequiresUpdate", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
}
protected void Page_PreRender(object sender, EventArgs e)
{
    if ((bool)RequiresUpdateProperty.GetValue(UpdatePanel2, null))
    {
        // gotcha!
    }
}

需要注意的是,当你设置了由UpdatePanel的子控件引起的条件UpdateMode和回发时,requireupdate属性返回false,而UpdatePanel的子控件没有被添加到触发器集合中。

注:上面的代码需要FullTrust代码访问安全级别,因为它使用反射

你已经回答了你的问题。您将决定何时更新updatepanel2,因此将由您指定动态添加控件的代码。至于事件,框架没有为每次updatepanel更新提供一个启动的事件:)。

例子:

UpdatePanel2.Update();

由于在此语句之前调用了update,因此您将添加以下所有控件

TextBox tbox = new TextBox();
tBox.ID = "txtbox1";
UpdatePanel2.Controls.Add(tBox);
UpdatePanel2.Update();