【问题标题】:Event Handler for UpdatePanel.Update() methodUpdatePanel.Update() 方法的事件处理程序
【发布时间】:2011-10-28 08:10:40
【问题描述】:

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

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

我该怎么做?

编辑: 这是我需要的简化版本。 UpdatePanel2.Update() 方法可以从 MasterPage 和 ... 等任何地方触发。 doing some stuff 不只是加载用户控件

【问题讨论】:

    标签: c# asp.net ajax jquery updatepanel


    【解决方案1】:

    检查这个答案:How to know which UpdatePanel causes the partial 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!
        }
    }
    

    请注意,当您设置 Conditional UpdateMode 和由未添加到 Triggers 集合中的 UpdatePanel 的子控件引起的回发时,RequiresUpdate 属性返回 false。

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

    【讨论】:

      【解决方案2】:

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

      示例:

      UpdatePanel2.Update();

      由于您在此语句之前调用了更新,因此您将添加所有控件,如下所示

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

      【讨论】:

      • 这只是我真实应用程序的简化版本。 UpdatePanel2.Update() 可以从像 Masterpage 这样的每个地方触发,而不仅仅是一个地方
      • @Mostafa 在母版页上你会做同样的过程吗?您将使用不同的控件集!因此,您应该再次重写代码(或 Stubb 出一个算法以在方法中执行此操作并传递参数)。
      猜你喜欢
      • 1970-01-01
      • 2016-09-06
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2013-01-04
      • 2012-02-08
      相关资源
      最近更新 更多