扩展阅读
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • php通过socket_bind()设置IP地址代码示例
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • 通过javascript库JQuery实现页面跳转功能代码
  • 两台电脑或者手机通过同一个AP上网,如何通过一台控制另外一台
  • linux下通过crond实现自动执行程序
  • 遥控通过串口传输,再通过input方式上报键值问题
  • 通过docker commit命令保存对docker容器的修改
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • 通过docker run命令运行新的docker镜像
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • 通过docker ps命令检查运行中的docker镜像
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • Session id实现通过Cookie来传输方法及代码参考
  • Linux下通过本机的shell执行ifconfig命令无问题,但是通过Telnet连接执行ifconfig就会提示出错
  • 通过docker search命令搜索可用docker镜像
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • Python3通过request.urlopen实现Web网页图片下载
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法
  • Jbuilder第一次编译说缺包,引入通过!然后把原来引入的注释,又通过!上帝,救我!
  •  
    当前位置:  编程语言>c#/asp.net

    c#通过委托delegate与Dictionary实现action选择器代码举例

     
    分享到:
        发布时间:2013-9-16  


        本文导语:  委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。...

      委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。

    在实际开发中大家一定都遇到过这种情况:

    1.前台页面信息是通过Ajax请求的方法加载的;

    2.或者是通过请求本页面加载的;

    3.请求的页面不仅仅是一个Http请求

    在这咱情况下我们一般会加一个action的参数,用于区别是应该调用那个方法,前台的发起我就不多说了,这个大家都知道,关键是后台应该怎么写呢?通常情况下一般是这样的:


    //取出action的值
     string action = context.Request["action"];
     if (action == "post1")
     {
     //调用第一个Post方法
     }
     else if (action == "post2")
     {
         //调用第一个Post方法
     }
     else if (action == "post3")
     {
         //调用第一个Post方法
     }
     else
     {
         //调用在没有找到action对应方法时执行
     }


     我感觉这种情况是比较多的,其实而可以使用Dictionary与delegate配置的方法来实现会更灵活一些,意思就是把方法生成一个List形式的,我一直是这么用的,今天正好看到同事也是这么写的,所以就拿出来给大家分享一下。因为我发现还有少人在用第一种方式,这里算是给大家提供一个解决方案吧。

    具体代码如下:

        //定义一个委托
        private delegate void actionByMain(HttpContext context);
        //定义一Key,Value的键值对,大家注意这里把委托放进去了
        private static Dictionary<string, actionByMain> mainList = new Dictionary<string,      
    actionByMain>();
        public void ProcessRequest(HttpContext context)
        {
            string action = string.Empty;
            if (string.IsNullOrEmpty(context.Request["action"]))
            {
                return;
            }
            action = context.Request["action"];
            //先检查一下有没有这个action
            if (mainList.ContainsKey(action))
            {
                mainList[action](context); return;
            }
        }
        //添加action对应方法的列表
        static void addMainList()
        {
            mainList.Add("post1", delegate(HttpContext context)
           {
               context.Response.Write("成功");
           });
            mainList.Add("post2", delegate(HttpContext context)
          {
              context.Response.Write("成功");
          });
            mainList.Add("post3", delegate(HttpContext context)
          {
              return;
          });
        }


    相关文章推荐:


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号