相对于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判断里面,每次回发都需要重新设置。

使用扩展方法简化RadAjaxManager设置的更多相关文章

  1. 通过扩展方法简化UnityAPI调用

    通过扩展方法简化UnityAPI调用 扩展方法unity apiapi简化 通过扩展方法简化UnityAPI调用 能省一秒是一秒,时间就是金钱,没人愿意把时间花在冗长的coding上

  2. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  3. JQuery EasyUI 扩展方法 日期控件 设置时间段函数

    /** Jquery扩展方法--by hgx 2018年1月8日-- * 设置时间段函数,开始时间(1号)与结束时间(当前日期) * 传入参数:--spaceMonth:查询间隔月,1为间隔查询一个月 ...

  4. C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

    1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...

  5. 实现一个对象验证库系列 -- 3) Fluent以及扩展方法实现 (请大神批评)

    前情回顾: 上一篇 2) 验证器实现 简单描述了下验证器的简单实现 本文将说说Fluent方式的实现,欢迎大神们指点指点 3) Fluent以及扩展方法实现 我们按照之前 Fluent 的设想以及我们 ...

  6. C#——各种参数,扩展方法

    余近日复习C#之基础知识,故作一随笔,也是对此前几篇博客中所记录的传值参数相关内容之汇总,还望诸位加以批评指正. 该博客包括以下内容: 传值参数 引用参数 输出参数 数组参数 具名参数 可选参数 扩展 ...

  7. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  8. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...

  9. ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

随机推荐

  1. Centos版Linux 一些常用操作命令

    Linux命令收集 1.文件处理命令:ls 功能描述:显示目录文件 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 语法:  ls  选项[-ald]  [文件或目录] -a ...

  2. 在Mac上搭建本地Apache服务器一些注意点

    一般在开发ios程序中,我们需要使用到和服务器的交互操作. 一般我们在Mac上使用Apache来搭建服务器.数据库采用MySQL.在Mac中Apache是自带的.所有,我们可以不需要额外的去Apple ...

  3. AdminLTE-2.2.0 学习

    这货基于Bootstrap 3(提供了统一的样式,覆盖了默认的),所以官方建议先搞懂Bootstrap 3再说. # 布局 Layout 布局由四个主要部分组成: Wrapper (.wrapper) ...

  4. 第三次作业——《K米评测》

    第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...

  5. vios 多 vlan设置

    [转 ]测试后修正 成功让IVM跑了多个VLAN,添加一块可携带多个vlanID的网卡,Nativevlan是改造的折中方法,如果不喜欢这种方法,附---删除多vlan网卡方法,一般情况下,lpar的 ...

  6. winfrom 捕获是否点击关闭按钮关闭的窗体

    const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; protected override void WndProc(ref M ...

  7. LeetCode(97) Interleaving String

    题目 Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: ...

  8. View优化

    前面写了个View画圆弧,为了让他和底层图片效果融合,采用先把圆弧画到和图片一样大小的画布上,然后用canvas的变换位图方法映射过去. bitmapWithReflection = Bitmap.c ...

  9. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  10. 【Git】简单地使用github当做远程共享仓库

    简单地使用github当做远程共享仓库 1.进入各自的github,选取一个人的github作为总的远程共享仓库,其余成员每次修改完项目后pull request请求合并自己的修改内容. 2.其余开发 ...