设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面。虽然如此,但感觉比较灵活。

和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法。

这样数据控件指生成纯数据。

ajax异步读取

使用了jQuery.ajax,通过ajax POST方式请求后台处理ashx页面,并传递相关参数。

ashx

完成动态加载用户控件,并根据接收的参数对控件的属性进行赋值。

加载控件,借助于博客园老赵的一篇博文,链接找不到了,以后再补。

public class ViewManager<T> where T : System.Web.UI.UserControl
{
private System.Web.UI.Page m_pageHolder; public T LoadViewControl(string path)
{
this.m_pageHolder = new System.Web.UI.Page(); return (T)this.m_pageHolder.LoadControl(path);
} public string RenderView(T control)
{
StringWriter output = new StringWriter(); this.m_pageHolder.Controls.Add(control);
HttpContext.Current.Server.Execute(this.m_pageHolder, output, false); return output.ToString();
}
}

代码很少,确很实用。

反射赋值

 foreach (System.Reflection.PropertyInfo p in control.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
if (string.IsNullOrEmpty(context.Request[p.Name])) continue;
try
{
Convert.ChangeType(context.Request[p.Name], p.PropertyType);
p.SetValue(control, Convert.ChangeType(context.Request[p.Name], p.PropertyType), null);
}
catch (System.InvalidCastException e)
{
}
}

具体使用

ViewManager<Web.controls.PageControl> viewManager = new ViewManager<Web.controls.PageControl>();
Web.controls.PageControl control = viewManager.LoadViewControl("~/upload/controls/" + name);
foreach (System.Reflection.PropertyInfo p in control.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
if (string.IsNullOrEmpty(context.Request[p.Name])) continue;
try
{
Convert.ChangeType(context.Request[p.Name], p.PropertyType);
p.SetValue(control, Convert.ChangeType(context.Request[p.Name], p.PropertyType), null);
}
catch (System.InvalidCastException e)
{
}
}
context.Response.Write(viewManager.RenderView(control));

数据控件

使用asp:Repeater显示数据。

最新文章

  1. 树莓派3B的食用方法-1(装系统 网线ssh连接)
  2. JS运动基础
  3. bzoj3732: Network--kruskal最小生成树+LCA
  4. [转载] A set of top Computer Science blogs
  5. ajax案例源码
  6. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化
  7. 知识备忘phpcms 简单解析一 数据表字段
  8. C# 通过ImportNode AppendChild方法合并XmlDocument,XML转为DataTable
  9. 对Qt下对话服务器客户端的总结(MyTcpServer与MyTcpClient)
  10. (中级篇 NettyNIO编解码开发)第八章-Google Protobuf 编解码-2
  11. 研究比对搞定博客 canvas-nest.js
  12. Applets的分析
  13. jquery.cookie.js写入的值没有定义
  14. (转)Maven pom.xml 配置详解
  15. 开发框架-Web-Java:JeePlus
  16. 剑指offer(一):二维数组中的查找
  17. User-Defined Components Must Be Capitalized
  18. Hierarchical query-层次查询之START WITH CONNECT BY用法
  19. web spring 容器
  20. 洛谷P1710 地铁涨价 图论

热门文章

  1. Python 融于ASP框架
  2. POJ 1144 Network(Tarjan)
  3. VISO下载地址
  4. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate
  5. 如何用crontab运行一个图形化界面的程序
  6. iOS &amp; Mac 调试命令(VMMap&amp;Top)
  7. C中调用LUA回调(LUA注册表)
  8. 14_把文件存放在SDCard
  9. PHP中对数据库操作的封装
  10. 17.allegro导入导出[原创]