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

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

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

ajax异步读取

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

ashx

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

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

  1. public class ViewManager<T> where T : System.Web.UI.UserControl
  2. {
  3. private System.Web.UI.Page m_pageHolder;
  4.  
  5. public T LoadViewControl(string path)
  6. {
  7. this.m_pageHolder = new System.Web.UI.Page();
  8.  
  9. return (T)this.m_pageHolder.LoadControl(path);
  10. }
  11.  
  12. public string RenderView(T control)
  13. {
  14. StringWriter output = new StringWriter();
  15.  
  16. this.m_pageHolder.Controls.Add(control);
  17. HttpContext.Current.Server.Execute(this.m_pageHolder, output, false);
  18.  
  19. return output.ToString();
  20. }
  21. }

代码很少,确很实用。

反射赋值

  1. foreach (System.Reflection.PropertyInfo p in control.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
  2. {
  3. if (string.IsNullOrEmpty(context.Request[p.Name])) continue;
  4. try
  5. {
  6. Convert.ChangeType(context.Request[p.Name], p.PropertyType);
  7. p.SetValue(control, Convert.ChangeType(context.Request[p.Name], p.PropertyType), null);
  8. }
  9. catch (System.InvalidCastException e)
  10. {
  11. }
  12. }

具体使用

  1. ViewManager<Web.controls.PageControl> viewManager = new ViewManager<Web.controls.PageControl>();
  2. Web.controls.PageControl control = viewManager.LoadViewControl("~/upload/controls/" + name);
  3. foreach (System.Reflection.PropertyInfo p in control.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
  4. {
  5. if (string.IsNullOrEmpty(context.Request[p.Name])) continue;
  6. try
  7. {
  8. Convert.ChangeType(context.Request[p.Name], p.PropertyType);
  9. p.SetValue(control, Convert.ChangeType(context.Request[p.Name], p.PropertyType), null);
  10. }
  11. catch (System.InvalidCastException e)
  12. {
  13. }
  14. }
  15. context.Response.Write(viewManager.RenderView(control));

数据控件

使用asp:Repeater显示数据。

项目中使用的ajax异步读取数据结构设计的更多相关文章

  1. ajax异步获取数据后动态向表格中添加数据(行)

    因为某些原因,项目中突然需要做自己做个ajax异步获取数据后动态向表格中添加数据的页面,网上找了半天都没有 看到现成的,决定自己写个例子 1.HTML页面 <!doctype html> ...

  2. jQuery选取所有复选框被选中的值并用Ajax异步提交数据

    昨天和朋友做一个后台管理系统项目的时候涉及到复选框批量操作,如果用submit表单提交挺方便的,但是要实现用jQuery结合Ajax异步提交数据就有点麻烦了,因为我之前做过的项目中基本上没用Ajax来 ...

  3. corefx 源码学习:NetworkStream.ReadAsync 是如何从 Socket 异步读取数据的

    最近遇到 NetworkStream.ReadAsync 在 Linux 上高并发读取数据的问题,由此激发了阅读 corefx 中 System.Net.Sockets 实现源码(基于 corefx ...

  4. 09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据,返回字符串

    cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给dat ...

  5. 为什么在项目中data需要使用return返回数据呢?

    问:为什么在项目中data需要使用return返回数据呢? 答:不使用return包裹的数据会在项目的全局可见,会造成变量污染:使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件.

  6. 其它课程中的python---6、python读取数据

    其它课程中的python---6.python读取数据 一.总结 一句话总结: 记常用和特例:慢慢慢慢的就熟了,不用太着急,慢慢来 库的使用都很简单:就是库的常用函数就这几个,后面用的时候学都来得及. ...

  7. ajax中的同步与异步修改数据的问题

    这次项目中因为前端有事儿,项目紧急加个新需求,于是自己硬着头皮上去看了下前端的逻辑后便开始动手了,但是为了简单起见就直接自己写了个ajax调服务来获取数据,然后修改前端定义的全局数据 //ajax来请 ...

  8. flask+sqlite3+echarts3+ajax 异步更新数据

    结构: /www | |-- /static |....|-- jquery-3.1.1.js |....|-- echarts.js(echarts3是单文件!!) | |-- /templates ...

  9. 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。

    问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...

随机推荐

  1. 刘汝佳 算法竞赛-入门经典 第二部分 算法篇 第六章 1(Lists)

    127 - "Accordian" Patience 题目大意:一个人一张张发牌,如果这张牌与这张牌前面的一张或者前面的第三张(后面称之为一位置和三位置)的点数或花式相同,则将这张 ...

  2. elasticsearch 八、重要的配置更改

    http://jingyan.baidu.com/article/7908e85c9fc626af491ad263.html

  3. **Apache Options指令详解

    http://www.365mini.com/page/apache-options-directive.htm Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options ...

  4. .bat后台运行

    可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序. ------------------------------------------------------------ Set ws = C ...

  5. js的in运算符与instanceof运算符

    in运算符:希望他的左操作数是一个字符串或可以转换为字符串,希望他的右操作数是一个对象.如果右操作数的对象拥有一个名为左操作数值的属性名,那么表达式返回true. var point= {x:1,y: ...

  6. Shell脚本基础II

    1.shell算术运算 1)加法 r=`expr 4 + 5`(注意! '4' '+' '5' 这三者之间要有空白) r=$[ 4 + 5 ] r=$(( 4 + 5 )) echo $r 2)乘法 ...

  7. Control character in cookie value, consider BASE64 encoding your value

    这是因为你给Cookie设置了中文的value,比如Cookie c = new Cookie("user", "张三");

  8. Java日期转换SimpleDateFormat格式大全(转)

    24小时制时间显示: public class Datetime { public static void main(String args[]){ java.util.Date current=ne ...

  9. LabelMe图像数据集下载

    Download MATLAB Toolbox for the LabelMe Image Database 利用Matlab Toolbox工具箱下载图像库 一.下载Matlab Toolbox工具 ...

  10. Case 架构的实际应用-2

    Test Plan in TestLink 1. For new release, we will create 2 test plans for each project 2. 1st test p ...