使用扩展方法简化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就是传统的请求处理响应的回归. ...
随机推荐
- Spring Framework 笔记(一):IoC
一:Spring中重要的概念 1. 容器( container ) : spring容器( ApplicationContext )的工作原则是创建容器中的组件( instance ),处理组件之间的 ...
- iOS.Performance-trick-presentViewController-is-so-slow-in-didSelectRowAtIndexPath
presentViewController is so slow in "tableView:didSelectRowAtIndexPath:" Use Case: 在UITabl ...
- geoserver使用curl发布 imagemosaic
1.//create workspace curl -v -u admin:geoserver -XPOST -H "Content-type: text/xml" -d ...
- bootstrap表格内容跑到表格外面的处理办法
http://stackoverflow.com/questions/21587813/bootstrap-responsive-table-content-wrapping td写下这个样式即可.& ...
- 20151208Study
20151208-----------------------------------------------------* Her main interest now is raising her ...
- css总集
1 font-style normal 正常显示 italic 斜体 百分比 字体大小 font-size 像素 字体大小 font-family 字体名称 设置字体名称 letter-spacing ...
- .NET平台开发Mongo基础知识
NoSQL简介 NoSQL相关的技术最近越来越受欢迎,Mongo本身就是基于NoSQL实现的.关于NoSQL你需要了解 什么是NoSQL NoSQL和传统的关系型数据库有什么区别 NoSQL的优缺点 ...
- 摘记 pyinstaller 使用自定义 spec
下面的是官网的文档, 我们可以用自定义spec的方式把想要的文件打包到目标文件夹里面 例如: 我们在程序中用了一个图标 test.ico, 如果我们只用 pyinstaller -w test.py ...
- Linux系统调用
在前面,我们接触到了很多函数能够实现系统相关的功能,比如解析命令行参数.控制进程以及映射内存等等.实际上,这些函数能够分为两大类: 库函数--这些函数就像普通函数一样,参数放置在寄存器或者栈里,运行时 ...
- delegate notification kvo三者比较
IOS 如何选择delegate.notification.KVO? 前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类 ...