使用扩展方法简化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判断里面,每次回发都需要重新设置。
使用扩展方法简化RadAjaxManager设置的更多相关文章
- 通过扩展方法简化UnityAPI调用
通过扩展方法简化UnityAPI调用 扩展方法unity apiapi简化 通过扩展方法简化UnityAPI调用 能省一秒是一秒,时间就是金钱,没人愿意把时间花在冗长的coding上
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- JQuery EasyUI 扩展方法 日期控件 设置时间段函数
/** Jquery扩展方法--by hgx 2018年1月8日-- * 设置时间段函数,开始时间(1号)与结束时间(当前日期) * 传入参数:--spaceMonth:查询间隔月,1为间隔查询一个月 ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- 实现一个对象验证库系列 -- 3) Fluent以及扩展方法实现 (请大神批评)
前情回顾: 上一篇 2) 验证器实现 简单描述了下验证器的简单实现 本文将说说Fluent方式的实现,欢迎大神们指点指点 3) Fluent以及扩展方法实现 我们按照之前 Fluent 的设想以及我们 ...
- C#——各种参数,扩展方法
余近日复习C#之基础知识,故作一随笔,也是对此前几篇博客中所记录的传值参数相关内容之汇总,还望诸位加以批评指正. 该博客包括以下内容: 传值参数 引用参数 输出参数 数组参数 具名参数 可选参数 扩展 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
随机推荐
- (一)startup.bat
那么startup.bat(// TODO startup.sh暂缓)启动后发生了什么呢? @echo off rem Licensed to the Apache Software Foundati ...
- mysql-5.7.14 源码安装笔记
安装编译 下载源码 mysql-5.7.14.tar.gz 解压定义安装变量 cd /usr/local/src mysql_version="mysql-5.7.14" tar ...
- 总结下用Vue.js和webpack遇到的问题
这段时间用vue.js+webpack做一个单页应用的demo,第一次尝试模块化,技术水平有限,学习不够深入,总是遇到各种问题,所谓前事不忘后事之师,so记录下. 1.ES6匿名函数里面this值 结 ...
- 磊科NI360路由器绕过密码登录
先分析正确登陆360路由器后cookies是怎么样的,发现只有一个值如下图: 可以看出登陆后只有一个netcore_login=guest:1 下面来模拟一下这个cookies看是否能登陆 增加好后直 ...
- PHP中phar包的使用
PHP5.3之后支持了类似Java的jar包,名为phar.用来将多个PHP文件打包为一个文件. 首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,includ ...
- php发展起源
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor".注意不是“Hypertext Preproces ...
- SAAS在中国市场的发展前景
发展现状 2008年1-7月软件行业实现收入4199.1亿元,同比增长32.4%.2008年第一季度,业务管理软件市场总量达16.31亿元,同比增长17.8%.面对成本的上升,企业选择了向信息化要效率 ...
- GDI+ 发生一般性错误解决办法
错误的代码g对象继续占用 未释放资源 如果路径不一样 没问题 相同路径 获取图片进行 缩略会造成GDI错误 /// <summary> /// 生成缩略图 /// </summary ...
- 数据导出Excel中文乱码
数据导出到EXCEL提供用户下载,当记录数大于5行时不会出现乱码.但只要不退出Excel,再删除除记录,当记录数小于5行时,导出也不会出现乱码.当然一旦退出Excel再导出就会出现乱码了. 可以试试 ...
- 蓄水池算法(Reservoir Sampling)
蓄水池算法是一种随机算法,可以形象的描述为从一个n维的list中选取k个元素,其中n是一个很大的数或者n是一个未知的数,而且一般n很大使得不会将list存在主存中. 解法: i = 0 while m ...