打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)
2017-07-29 17:56
309 查看
如果你没有看我第二天写的内容的,我想你是看不懂的!!!!
好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能每个页面都需要那样写吧,那我们来一步一步来封装我们的代码,变得更牛逼,维护性更高!!!!!
首先我们来分析,我昨天写的代码:
第一步:在界面写入2个隐藏控件,用来存放方法名和参数(亲们,你们不可能每个页面都去写吧!!!当然不行,那怎么办)
我们是这样实现的,通过jquery在页面每次在页面加载完成后,判断控件是否存在,不存在在就写入,存在就不作任何操作!!
$(function(){
if($("#hid_fangfa").length<1)//判断方法名的隐藏控件是否存在,不存在就写入隐藏控件
{
$("#form1").children().eq(0).after('<inputtype="hidden"name="hid_fangfa"id="hid_fangfa"/>');
}
if($("#hid_canshu").length<1){//判断参数的隐藏控件是否存在,不存在就写入隐藏控件
$("#form1").children().eq(0).after('<inputtype="hidden"name="hid_canshu"id="hid_canshu"/>');}});
第二步:js写一个方法,只用写一个参数(方法名),就可以动态拼接多个参数,将动态参数拼接完成放入隐藏控件中,然后执行表单提交(感觉js没有学好,好难实现!!!!!)
这里我们要用到arguments的动态参数!!!(这里除了方法名字不用拼接之外的其他参数都要拼接,我们这用‘|’来拼接的)
functiongohoutai(fangfa){
varcanshu='';
for(vari=0;i<arguments.length;i++){//获取所有的参数,除了方法名之外全部需要拼接
if(typeof(arguments[i])=='object')//拼接对象只支持string和number
{
continue;
}
if(i!=0&&i==1)
{
canshu=canshu+arguments[i].toString();
}
if(i>1)
{
canshu=canshu+"|"+arguments[i].toString();
}
}
$("#hid_fangfa").val(fangfa);//在隐藏控件中存入方法名
$("#hid_canshu").val(canshu);//在隐藏控件中存入拼接后的参数
$("#form1").attr("target","_self");//这里表示指向的form1默认提交的页面
$("#form1").submit();//提交表单
}
第三步:后台通过隐藏控件中的方法名字不同去执行不同的方法(难道一定要循环判断隐藏控件的值才能执行不同的方法吗?难道要使用传说的反射!!!!)
亲们,你们说对了,这里唯有反射才能实现前台动态的调用后台的不同的方法。
后台的代码需要能够通过js动态的调用前台的方法,就必须要继承一个类,这个类叫父类,我们这里建了一个类叫Base,还需要继承System.Web.UI.Page,
首先我们通过Request的方式获取隐藏控件的值,然后通过方法名字,参数的个数去找到该页面的对应的方法,然后执行这个方法!
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Reflection;//需要引用反射
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
第四步:首先要引入我们刚才写的js,同时后台需要publicpartialclasstest1:Base,继承我们写的公共类
让我们我们在前台动态的调用方法吧!!
前台:<inputtype="button"value="2个参数"onclick="gohoutai('gogo','我是好人','222');"/>
<inputtype="button"value="1个参数"onclick="gohoutai('gogo','222');"/>
后台:
publicvoidgogo(strings,stringdd)
{
s="2222";
}
publicvoidgogo(stringss)
{
ss="2222";
}
然后我们打入断点,希望能够命中!!!!!!(成功打入断点)
至此我们的前台调用后台的封装到此结束,我想你在也没有见过这么牛逼的封装了吧!!代码的世界太疯狂了!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
看了我写的这么多,你们发现一个东西没有,好像界面还是刷新了,如果我想不刷新提交后台怎么办?而且我还想像ajax一样执行完成后能够返回参数,能够在前台继续执行!我想我们是在颠覆webform的写法吧!!!!!
好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能每个页面都需要那样写吧,那我们来一步一步来封装我们的代码,变得更牛逼,维护性更高!!!!!
首先我们来分析,我昨天写的代码:
第一步:在界面写入2个隐藏控件,用来存放方法名和参数(亲们,你们不可能每个页面都去写吧!!!当然不行,那怎么办)
我们是这样实现的,通过jquery在页面每次在页面加载完成后,判断控件是否存在,不存在在就写入,存在就不作任何操作!!
第二步:js写一个方法,只用写一个参数(方法名),就可以动态拼接多个参数,将动态参数拼接完成放入隐藏控件中,然后执行表单提交(感觉js没有学好,好难实现!!!!!)
这里我们要用到arguments的动态参数!!!(这里除了方法名字不用拼接之外的其他参数都要拼接,我们这用‘|’来拼接的)
第三步:后台通过隐藏控件中的方法名字不同去执行不同的方法(难道一定要循环判断隐藏控件的值才能执行不同的方法吗?难道要使用传说的反射!!!!)
亲们,你们说对了,这里唯有反射才能实现前台动态的调用后台的不同的方法。
后台的代码需要能够通过js动态的调用前台的方法,就必须要继承一个类,这个类叫父类,我们这里建了一个类叫Base,还需要继承System.Web.UI.Page,
首先我们通过Request的方式获取隐藏控件的值,然后通过方法名字,参数的个数去找到该页面的对应的方法,然后执行这个方法!
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Reflection;//需要引用反射
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
publicclassBase:System.Web.UI.Page
{
protectedoverridevoidOnInit(EventArgse)
{
if(Page.IsPostBack)
{
stringfangfa=this.Request["hid_fangfa"]==null?"":this.Request["hid_fangfa"].ToString();//获取方法名
stringcanshu=this.Request["hid_canshu"]==null?"":this.Request["hid_canshu"].ToString();//获取参数
MethodInfomethod=null;
MethodInfo[]methods=this.GetType().GetMethods();//获取该类中的所有方法
for(inti=0;i<methods.Length;i++)//遍历所有方法,找到方法名字相同,并且参数个数也相同的方法
{
if(methods[i].Name==fangfa&&methods[i].GetParameters().Length==canshu.Split('|').Length)
{
method=methods[i];
break;
}
}
if(method!=null)//判断是否找到方法
{
string[]strs=canshu.Split('|');//获取参数分割后的数组
method.Invoke(this,strs);//执行方法
}
}
}
}
第四步:首先要引入我们刚才写的js,同时后台需要publicpartialclasstest1:Base,继承我们写的公共类
让我们我们在前台动态的调用方法吧!!
前台:<inputtype="button"value="2个参数"onclick="gohoutai('gogo','我是好人','222');"/>
<inputtype="button"value="1个参数"onclick="gohoutai('gogo','222');"/>
后台:
publicvoidgogo(strings,stringdd)
{
s="2222";
}
publicvoidgogo(stringss)
{
ss="2222";
}
然后我们打入断点,希望能够命中!!!!!!(成功打入断点)
至此我们的前台调用后台的封装到此结束,我想你在也没有见过这么牛逼的封装了吧!!代码的世界太疯狂了!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
看了我写的这么多,你们发现一个东西没有,好像界面还是刷新了,如果我想不刷新提交后台怎么办?而且我还想像ajax一样执行完成后能够返回参数,能够在前台继续执行!我想我们是在颠覆webform的写法吧!!!!!
相关文章推荐
- 打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台(第二天)
- 打造颠覆你想象中的高性能,轻量级的webform框架---无刷新提交后台(第四天)
- 打造 高性能,轻量级的 webform框架---js直接调后台
- 打造颠覆你想象中的高性能,轻量级的webform框架---无刷新提交后台并返回参数(第五天)
- 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)
- WebForm框架页面上js修改服务端控件导致后台不能正确获取到控件值的问题【总结】
- Three.js的轻量级封装框架Sim.js解析(1)
- Magicodes.WeiChat——后台JS框架封装
- table+div+iframe打造高度自适应的后台布局框架(需要用JS控制大小)
- table+div+iframe打造高度自适应的后台布局框架(需要用JS控制大小)
- 打造一个轻量级,简单,易用的Android Banner框架
- 关于js封装框架类库之DOM操作模块(二)
- 轻量级web框架node.js和bottle
- 轻量级JS框架集合:GooJs.com
- JS 框架 :后台系统完整的解决方案
- 腾讯 VasSonic :轻量级的高性能的 Hybrid 框架正式开源
- android轻量级开源缓存框架——ASimpleCache(ACache)源码分析(封装好了一个工具类供大家使用)
- 腾讯正式开源高性能超轻量级 PHP 框架 Biny
- iw14.0.50来了,终于可以直接在地址栏输入url打开iw功能页面了;可以自由使用EasyUI等js框架了;显示模式对话框也不再七绕八绕惹人烦了;
- java 解决js直接提交统计数据到后台