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

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

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

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

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

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

$(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‘)
                {
                    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();
        } 

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

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

后台的代码需要公用,就必须要继承 一个类,这个类叫父类,我们这里建了一个类 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的 写法吧!!!!!

时间: 2024-10-18 21:29:09

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

打造颠覆你想象中的高性能,轻量级的webform框架---无刷新提交后台(第四天)

问题3:使用webform,每次提交后台界面都要刷新,能不能让我们与后台 交互的时候像ajax一样,界面不用刷新,同时还能返回参数并且继续在前台执行??     相信很多人和我一样,这也是很多人开发放弃webform最重要的原因吧!!这也是很多人觉得webform不好的原因吧!!!其实mvc提交form表单  也会刷新,但是 视图中没有像webfrom一样的后台,所以必须使用 ajax 的方法提交后台,所以没有刷新! 其实这个问题的解决方案早在很多年前就已经解决了,只是知道的人不多,所以大家的印

打造 高性能,轻量级的 webform框架-----如何替换webform的垃圾控件(第一天)

前文描述: 随着.net  推出 MVC框架以来,webform 与 mvc 的争论一直没有停止过,一直以来 mvc 的 拥护者远远高于 webform,但是webfrom的有些优势又是mvc而无法替代的.下面我们来看一下webform相比与MVC的劣势在什么地方,而我们要做的是如何解决这些劣势,同时在性能上要超过MVC. 1.大量的服务器控件,大量的垃圾代码,导致页面加载速度慢. 2.每次点击按钮或者一些操作 界面都会刷新,又不想写 ajax . 3.每次调用后台前想先执行前台很难写, 前台

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

功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点的异常down机 可视化管理 通过服务管理系统可以方便查看服务状态和统计信息 与原生thrift通信 支持与原生thrift服务进行通信 与业内方案的对比 与thrift.avro.hessian相比,harpc支持了高可用,并且更加易用 与dubbo相比,harpc支持了跨语言,并且更轻量级 与i

使用 ACE 库框架在 UNIX 中开发高性能并发应用

使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论创建使用 ACE 线程的应用程序的一些方法.Adaptive Communication Environment (ACE) 是一个高性能.开放源码.面向对象的框架和 C++ 类库,它有助于简化网络应用程序的开发.ACE 工具包包括一个操作系统层和一个封装网络 API 的 C++ 外观(facade

Javascript事件冒泡,没有想象中那么糟糕

Javascript事件冒泡,没有想象中那么糟糕  提到js事件,我们可能第一时间反应的就是“如何阻止事件冒泡”:但是事件冒泡真的是如我们想象的那么糟糕吗? 1. Event 对象  Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 2. 事件句柄 (Event Handlers)  指能够使 HTML 事件触发浏览器中的行为,比如点击(onclick).鼠标悬浮(onfocus)等 3. 什么是事件冒泡  一个对象(event.srcEle

比你想象中还要强大的枚举类型---案例篇

前几天写了一篇介绍枚举功能强大的文章.有几个朋友给我指正说,没有案例单纯描述不够直观.确实啊,在这里我就在写一个案例篇,对上次的文章做补充说明. 此案例是一个游戏服务器的消息识别器的简化.做过游戏开发都知道,客户端和服务器之间的交互需要定义很多的消息类型,而且这个消息类型是需要不断扩展的.消息识别器就是根据客户端发送过来的消息编码封装成消息实体对象,以供业务逻辑层处理.这里就用这个简化后的消息识别器展示一下枚举的一个应用.(此处主要用作枚举的一个应用实例演示,由于代码做了简化处理,设计上难免会有

想象中的python,实际的python,希望的python

一.我想象中的python 说实话,当在课表中看到这门课的时候,我的心里很害怕.因为我觉得这是一门只听名字就很难的课,我在网上搜了几份python的编程代码,看的自己眼花缭乱,想想自己学C语言时的艰辛,就觉得头都大了...... 二.实际的python 终于上课了,在课上我听老师讲python,突然意识到,其实,他可能没我想的那么难. (1).老师说python是解释性语言,他和C语言的不同在于,C语言是自己完整的写完一份程序,只有都写对了,才能得出结果.而在我练习的过程中,我发现,python

比你想象中还要强大的枚举类型

开发中枚举类型往往被用在可以一一列举的实例中,比如 enum Color{red,green,blue;}.但是可能你不会注意到它的更强大之处,比如如下问题看看你能作答吗 1.枚举类型可以有构造函数吗? 2.枚举类型可以实现接口.继承类吗? 3.枚举类型可以有static成员变量和方法吗?以及可否有实例变量和方法吗? 4.枚举类型可以被继承吗? ..........等(打开eclipse一试便知的知识) 其实enum类型就是一个特殊的java类,它几乎具有一个java类所具有的大部分功能.它更类

比你想象中坚强

某一天,我通过上网和一位很久未联系的同学联系上了.可当我问她过得好不好时,她许久未语,正当我准备责问她时,她说她快要离婚了,她老公要跟她离,她现在带着自己的孩子-我不禁唏嘘感慨!        又是某一天,天空开着老太阳,灼热的空气令我烦躁.我在上班的鞋柜处准备换上工作装备,正当我要死不活的在换鞋时无意间听到旁边有个女人的声音 "不过就不过了"这声音里充满了坚定,无奈,被迫,当然还有悲伤,绝望!我忍不住的想要转过头去窥探一下这个女人,我看到那是一个四十岁到五十岁左右的脸,岁月的痕迹无情