相对于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. console.log()与alert()的区别

    1.alert() a.有阻塞作用,不点击确定,后续代码无法继续执行 b.alert只能输出string,如果alert输出的是对象,会自动调用toString()方法 eg:alert([1,2,3 ...

  2. SQL Server 获取最后一天(指定时间的月最后一天日期)

    /* author OceanHo @ 2015-10-23 10:14:21 获取指定时间字符串指定日期的月最后一天日期 */ IF OBJECT_ID('get_LastDayDate') IS ...

  3. 学霸网站---Alpha+版本测试报告

    说明:由于老师前几天要求交测试报告,本测试报告只针对当时完成的功能进行测试,并不是几天之后要发布的BETA版本,不会有很多差别,但是BETA版本会包含对其中BUG的修复. 学霸网站测试报告 一.引言 ...

  4. ViewPager循环显示

    好久没有写博客了,今天加一个ViewPager页面的循环显示,添加了一个删除页面的小按钮: MainActivity.java package com.yt.viewpagerlooper; impo ...

  5. 获取当前运行dll文件的路径

    char moduledir[MAX_PATH];  GetModuleFileNameA(GetModuleHandleA("ppdl_BE081_BIW_seal_library.dll ...

  6. 20155306白皎 学习技能+C语言学习

    你有什么技能比大多数人更好 谈起技能,我还有感觉有微微拿得出手的也只有主持这一项才艺了吧.从小学到高中一直参加朗诵比赛,以及从小学到大学一直在所在学校有担任过主持工作. 上大学以来,也参加了院级朗诵比 ...

  7. freeCodeCamp:Caesars Cipher

    让上帝的归上帝,凯撒的归凯撒. 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码. 移位密码也就是密码中的字母会按照指定的数量来做移位. 一个常见的案例就是ROT13密码,字母 ...

  8. Some About Spring

    什么是Spring:Spring是一个从实际开发中抽取出来的框架,它对代码中需要重复解决的步骤抽象成为了一个框架.留给开发者的仅仅是与特定应用相关的部分,大大提高了企业应用的开发效率.例外.Sprin ...

  9. app启动速度

    跟踪代码发现,应用启动时的白屏会持续到draw调用完成,这个过程中任何耗时操作将导致白屏时间增长. 1.adb shell am start -W -n yourpakagename/MainActi ...

  10. node学习笔记(四)

    //Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...