打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)

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

 2017/7/30 2:38:42  刘晶  程序员俱乐部  我要评论(0)
  • 摘要:如果你没有看我第二天写的内容的,我想你是看不懂的!!!!好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能每个页面都需要那样写吧,那我们来一步一步来封装我们的代码,变得更牛逼,维护性更高!!!!!首先我们来分析,我昨天写的代码:第一步:在界面写入2个隐藏控件,用来存放方法名和参数(亲们,你们不可能每个页面都去写吧!!!当然不行,那怎么办)我们是这样实现的,通过jquery在页面每次在页面加载完成后,判断控件是否存在,不存在在就写入,存在就不作任何操作!!$
  • 标签:for Web JS

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

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

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

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

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

class="brush:javascript;gutter:false;">$(function () {          
            if ($("#hid_fangfa").length < 1)  // 判断方法名 的隐藏控件是否存在,不存在就写入隐藏控件
            {
                $("#form1").children().eq(0).after('<input type="hidden"  name="hid_fangfa" id="hid_fangfa" />');
            }

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

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

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

function gohoutai(fangfa) {           
            var canshu = '';  
            for (var i = 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 的方式获取 隐藏控件的值,然后通过方法名字,参数的个数 去找到该页面的对应的方法,然后执行这个方法!

 

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;

public class Base:System.Web.UI.Page
    {      
        protected override void OnInit(EventArgs e)
        {           
            if (Page.IsPostBack)
            {
                string fangfa = this.Request["hid_fangfa"] == null ? "" : this.Request["hid_fangfa"].ToString(); // 获取方法名
                string canshu = this.Request["hid_canshu"] == null ? "" : this.Request["hid_canshu"].ToString(); //获取参数
MethodInfo method
=null; MethodInfo[] methods=this.GetType().GetMethods(); // 获取该类中的 所有方法 for (int i = 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,同时后台需要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的 写法吧!!!!!

 

 

 

   

  

 

    

          

发表评论
用户名: 匿名