如果你没有看我第二天写的内容的,我想你是看不懂的!!!!

好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能 每个页面都需要那样写吧,那我们来一步一步来封装 我们的代码,变得更牛逼,维护性更高!!!!!

首先我们来分析,我昨天写的代码:

第一步:在界面写入2个隐藏控件,用来存放方法名和参数  (亲们,你们不可能每个页面都去写吧!!!当然不行,那怎么办)

我们是这样实现的,通过jquery在页面每次在页面加载完成后,判断控件是否存在,不存在在就写入,存在就不作任何操作!!

  1. $(function () {
  2. if ($("#hid_fangfa").length < 1) // 判断方法名 的隐藏控件是否存在,不存在就写入隐藏控件
  3. {
  4. $("#form1").children().eq(0).after('<input type="hidden" name="hid_fangfa" id="hid_fangfa" />');
  5. }
  6.  
  7. if ($("#hid_canshu").length < 1) {// 判断参数 的隐藏控件是否存在,不存在就写入隐藏控件
  1. $("#form1").children().eq(0).after('<input type="hidden" name="hid_canshu" id="hid_canshu" />'); } });

 第二步:js写一个方法,只用写一个参数(方法名),就可以动态拼接多个参数,将动态参数拼接完成放入隐藏控件中,然后执行表单提交(感觉js没有学好,好难实现!!!!!)

这里我们要用到arguments 的 动态参数!!!(这里除了 方法名字不用拼接之外的其他参数都要拼接 ,我们这用  ‘|’来拼接的)

  1. function gohoutai(fangfa) {
  2. var canshu = '';
  3. for (var i = 0; i < arguments.length; i++) { //获取所有的参数,除了方法名之外全部需要拼接
  4. if (typeof (arguments[i]) == 'object') //拼接对象只支持 string 和 number
  5. {
  6. continue;
  7. }
  8. if (i != 0&&i==1)
  9. {
  10. canshu = canshu + arguments[i].toString();
  11. }
  12. if ( i > 1)
  13. {
  14. canshu = canshu +"|"+ arguments[i].toString();
  15. }
  16. }
  17. $("#hid_fangfa").val(fangfa); //在隐藏控件中存入方法名
  18. $("#hid_canshu").val(canshu);//在隐藏控件中存入 拼接后的参数
  1. $("#form1").attr("target", "_self"); //这里表示指向 的 form1 默认提交的页面
    $("#form1").submit(); //提交表单
    } 

第三步: 后台通过  隐藏控件中的 方法名字不同去执行不同的方法(难道一定要循环判断隐藏控件的值才能执行不同的方法吗?难道要使用传说的反射!!!!)

亲们,你们说对了,这里唯有反射才能实现前台动态的调用后台的不同的方法。   

后台的代码需要能够通过js 动态的调用前台的方法,就必须要继承 一个类,这个类叫父类,我们这里建了一个类 叫Base,还需要继承System.Web.UI.Page,

首先我们通过Request 的方式获取 隐藏控件的值,然后通过方法名字,参数的个数 去找到该页面的对应的方法,然后执行这个方法!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;  //需要引用反射
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

  1. public class Base:System.Web.UI.Page
  2. {
  3. protected override void OnInit(EventArgs e)
  4. {
  5. if (Page.IsPostBack)
  6. {
  7. string fangfa = this.Request["hid_fangfa"] == null ? "" : this.Request["hid_fangfa"].ToString(); // 获取方法名
  8. string canshu = this.Request["hid_canshu"] == null ? "" : this.Request["hid_canshu"].ToString(); //获取参数

  9. MethodInfo method=null;
  10. MethodInfo[] methods=this.GetType().GetMethods(); // 获取该类中的 所有方法
  11. for (int i = ; i < methods.Length; i++) //遍历所有方法,找到方法名字相同,并且参数个数也相同的方法
  12. {
  13. if (methods[i].Name == fangfa && methods[i].GetParameters().Length == canshu.Split('|').Length)
  14. {
  15. method = methods[i];
  16. break;
  17. }
  18. }
  19. if (method != null) //判断是否找到方法
  20. {
  21. string[] strs = canshu.Split('|'); //获取参数 分割后的 数组
  22. method.Invoke(this, strs); // 执行方法
  23. }
  24. }
  25. }
  26. }

第四步:  首先要引入 我们刚才写的js,同时后台需要public partial class test1 : Base    ,继承我们写的公共类

让我们我们在前台动态的调用方法吧!!

前台  :   <input type="button" value="2个参数" onclick="gohoutai('gogo', '我是好人','222');" />

<input type="button" value="1个参数" onclick="gohoutai('gogo','222');" />

后台 :

public void gogo(string s, string dd)
{
s = "2222";
}

public void gogo(string ss) 
{
ss = "2222";
}

然后我们打入断点 , 希望能够命中 !!!!!!(成功打入断点)

至此 我们的 前台调用后台的 封装到此结束,我想你在也没有见过这么牛逼的封装了吧!!代码的世界太疯狂了!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

看了我写的这么多,你们发现一个东西没有,好像界面还是刷新了,如果我想 不刷新提交后台怎么办?而且我还想 像 ajax 一样执行完成后能够    返回参数,能够在前台继续执行! 我想我们是在颠覆  webform的 写法吧!!!!!

打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)的更多相关文章

  1. 打造 高性能,轻量级的 webform框架---js直接调后台(第二天)

    问题2: 每次与后台打交道 都需要写一些自己都看不太懂的事件,而且传参数很麻烦,这就是.net 封装的事件,如何解决呢?        首先以为webfrom事件,都需要写 服务器控件来绑定后台的事件 ...

  2. 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)

    前文描述: 随着.net  推出 MVC框架以来,webform 与 mvc 的争论一直没有停止过,一直以来 mvc 的 拥护者远远高于 webform,但是webfrom的有些优势又是mvc而无法替 ...

  3. 打造颠覆你想象中的高性能,轻量级的webform框架---无刷新提交后台并返回参数(第五天)

    问题5:  使用aspx 页面执行后台方法,总是要刷新整个页面?我想提交后台不刷新页面,同时返回参数 执行前台的js 脚本,就是说类似于像 ajax 的效果一样,那我们该怎么做呢? 大家是否已经看了前 ...

  4. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  5. 0930MySQL中实现高性能高并发计数器方案(例如文章点击数)

    转自http://www.jb51.net/article/56656.htm 这篇文章主要介绍了MySQL中实现高性能高并发计数器方案,本文中的计数器是指如文章的点击数.喜欢数.浏览次数等,需要的朋 ...

  6. 基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架

    功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点 ...

  7. 为WPF中DropShadowBitmapEffect提供轻量级的替代品

    原文:为WPF中DropShadowBitmapEffect提供轻量级的替代品 为WPF中DropShadowBitmapEffect提供轻量级的替代品                         ...

  8. std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)

    Copy-on-write(以下简称COW)是一种很重要的优化手段.它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源. ...

  9. 快速电路仿真器(FastSPICE)中的高性能矩阵向量运算实现

    今年10-11月份参加了EDA2020(第二届)集成电路EDA设计精英挑战赛,通过了初赛,并参加了总决赛,最后拿了一个三等奖,虽然成绩不是很好,但是想把自己做的分享一下,我所做的题目是概伦电子出的F题 ...

随机推荐

  1. CodeForces 110C 【构造】

    思路: 7越多越好,然后从7最多个数枚举过去,判断一下剩下的能不能用4解决就好了: #include <bits/stdc++.h> using namespace std; typede ...

  2. Mice and Holes 单调队列优化dp

    Mice and Holes 单调队列优化dp n个老鼠,m个洞,告诉你他们的一维坐标和m个洞的容量限制,问最小总距离.1 ≤ n, m ≤ 5000. ​ 首先列出朴素的dp方程:\(f[i][j] ...

  3. 洛谷P3694 邦邦的大合唱站队/签到题

    P3694 邦邦的大合唱站队/签到题 题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶 ...

  4. 51nod 1781 Pinball(线段树)

    题面 Pinball的游戏界面由m+2行.n列组成.第一行在顶端.一个球会从第一行的某一列出发,开始垂直下落,界面上有一些漏斗,一共有m个漏斗分别放在第2~m+1行,第i个漏斗的作用是把经过第i+1行 ...

  5. rlwrap: command not found和解决linux下sqlplus 提供浏览历史命令行的功能

    rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...

  6. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  7. 洛谷P2911 [USACO08OCT]牛骨头Bovine Bones【水题】

    题目大意:输入S1,S2,S3,随机生成三个数x,y,z,求x+y+z出现次数最多的数(如果有多个答案输出最小的),其中1<=x<=S1,1<=y<=S2,1<=z< ...

  8. 需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数 及 多属性节点查询

    第一个问题, 1. 首先需要引入命名空间, 2. 其次,在用xpath查找结点时,在selectNodes等方法中再次带入命名空间 如 XmlDocument doc = new XmlDocumen ...

  9. git 处理 crlf rf

    假如你正在 Windows 上写程序,又或者你正在和其他人合作,他们在 Windows 上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题.这是因为 Windows 使用回车和换行两 ...

  10. Anniversary party (树形DP)

    There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...