• 使用扩展方法简化RadAjaxManager设置


    相对于RadAjaxPanel,RadAjaxManager提供了更精确控制更新目标的设置,特别是在某些场景下,使用RadAjaxManager能够获得更好的性能。

    但是,由于要明确设置目标,配置的代码显得比较繁琐,比如这样简单的控件:

    <asp:xxx id="source1" ... />
    <asp:xxx id="source2" ... />
    <asp:xxx id="source3" ... />
    <asp:xxx id="target" ... />

    它的配置代码看起来非常多,经常可以见到大量这样的代码:

    <telerik:RadAjaxManager runat="server" ID="lwme">
      <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="source1">
          <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="target" />
          </UpdatedControls>
        </telerik:AjaxSetting>
        <telerik:AjaxSetting AjaxControlID="source2">
          <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="target" />
          </UpdatedControls>
        </telerik:AjaxSetting>
        <telerik:AjaxSetting AjaxControlID="source3">
          <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="target" />
          </UpdatedControls>
        </telerik:AjaxSetting>

    针对这种情况,可以简化为如下代码:

    <asp:PlaceHolder id="phlwme" ...>
      <asp:xxx id="source1" ... />
      <asp:xxx id="source2" ... />
      <asp:xxx id="source3" ... />  
    </asp:PlaceHolder>
    <asp:xxx id="target" ... />
    
    <telerik:RadAjaxManager runat="server" ID="lwme">
      <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="phlwme">
          <UpdatedControls>
            <telerik:AjaxUpdatedControl ControlID="target" />
          </UpdatedControls>
        </telerik:AjaxSetting>

    但是,实际应用中,这几个source可能不能被包含在一个容器中(容器中可能有其他元素),否则会造成性能浪费;这个时候,通过后端代码优化显得更加有效。

    一个简单的扩展方法实现如下:

    public static class RadAjaxManagerExtensions_By_Lwme_At_Cnblogs
    {
        /// <summary>
        /// 为多个源控件设置同一个更新目标
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="target"></param>
        /// <param name="sources"></param>
        public static void AddAjaxSettingToSameTarget(this RadAjaxManager manager, Control target, params Control[] sources)
        {
            foreach (var source in sources)
            {
                AddAjaxSetting(manager, source, target);
            }
        }
    
        static bool IsControlValid(Control control)
        {
            return !string.IsNullOrEmpty(control.ID) &&
                !(control is LiteralControl); // LiteralControl 为普通的文本
        }
    
        /// <summary>
        /// 为同一个源控件设置多个更新目标
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="sourceControl"></param>
        /// <param name="targets"></param>
        public static void AddAjaxSetting(this RadAjaxManager manager, Control sourceControl, params Control[] targets)
        {
            var setting = new AjaxSetting(sourceControl.ID);
            foreach (var target in targets)
            {
                if (!IsControlValid(target))
                    continue;
    
                var update = new AjaxUpdatedControl();
                update.ControlID = target.ID;
                setting.UpdatedControls.Add(update);
            }
            manager.AjaxSettings.Add(setting);
        }
    }

    前面的配置代码就可以简化为如下调用:

    lwme.AddAjaxSettingToSameTarget(target, source1, srouce2, source3)

    对于同一个源控件更新多个目标的,可以使用以下代码:

    lwme.AddAjaxSetting(source, target1, target2, target3)

    在调用以上代码进行设置的时候需要注意,不能放在IsPostback判断里面,每次回发都需要重新设置。

  • 相关阅读:
    c++中的工具(一):std::pair<class T1, class T2>
    mybatisplus Lambda 表达式
    将查询结果映射成map的注解,其中第一个字段为key,第二个字段为value.
    mybatisplus 添加 /修改 数据 插入公共字段
    mybatisplus扩展BaseMapper的方法(InsertBatchSomeColumn及AlwaysUpdateSomeColumnById)
    根据俩日期(yyyy-MM-dd)格式获取它们之间的年月日组合结果(js实现)
    oralce json字段中根据key提取value的函数(转载)
    记录一下关于oracle还原数据库的问题
    记录一下数据库外连接 的不同
    JAVA项目从运维部署到项目开发(六. Jenkins之静态页面(2))
  • 原文地址:https://www.cnblogs.com/lwme/p/using-extension-method-simplify-radajaxmanager.html
Copyright © 2020-2023  润新知