zoukankan      html  css  js  c++  java
  • Kooboo CMS

      今天决定写一篇好一点的文章,吼吼!首先我们必须找到这个文件,这个文件是UsersController.cs,我们找到和添加新用户有关的方法,如下代码:

            public virtual ActionResult Create()
            {
                return View();
            }
    
            [HttpPost]
            public virtual ActionResult Create(CreateUserModel model, string @return)
            {
                var data = new JsonResultData(ModelState);
    
                if (ModelState.IsValid)
                {
                    data.RunWithTry((resultData) =>
                    {
                        UserManager.Add(model.ToUser());
                        data.RedirectUrl = @return;
                    });
                }
                return Json(data);
    
            }
    

      注意到这是一个虚方法,我指的是后面的POST请求带来的方法。

    我们可以看到CreateUserModel里面有这些东西。这些东西都是我从VIEW里面带过来的。

    这个jsonResultEntry就是我们的LAMBDA表达式左边的部分。

    而里面的Action<JsonResultData>其实是一个匿名的委托方法。要说这2个东西,其实我个人感觉很有渊源啊,看下面的图

    其实这个jsonResultEntry就是一个形式参数的入口。

    我们打开这里面进行查看

    {Method = {Void <Create>b__4(Kooboo.CMS.Common.JsonResultData)}}

    不过为什么呢?既然这个方法是一个带参数的JsonResultData类型的。哈哈,我也不知道了。

    下面是打断点到这之后的结果。

    好吧,下面继续,居然到了这个方法。贴代码:

            protected override void InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
            {
                if (actionResult is FileResult)
                {
                    controllerContext.HttpContext.Response.RestoreRawOutput();
                }
                base.InvokeActionResult(controllerContext, actionResult);
            }
    

      

    大家注意到了没有,这里居然有一个override的方法,这证明我们自己写了一个方法去覆盖系统原有的。

    后面的ACTIONRESULT就是刚刚前一步返回的ActionResult.

    下面的FILERESULT暂时不管。

    哈哈,到这一步我才知道,原来最终还是调用基类的方法哦,我就说阿不咋这么叼,自己开始改MVC底层了,汗死。

    进行了若干步骤以后。。。。到了一个httpapplicationHooker方法里面,执行这个方法。

            public virtual void Application_EndRequest(object sender, EventArgs e)
            {
                RunEvents((events) =>
                {
                    events.Application_EndRequest(sender, e);
                });
            }

    嘿嘿,这个RunEvent是底层的方法,被我发现了。

            protected virtual void RunEvents(Action<IHttpApplicationEvents> action)
            {
                var events = EngineContext.Current.ResolveAll<IHttpApplicationEvents>();
    
                foreach (var item in events)
                {
                    action(item);
                }
            }

    当我看到这个ResolveAll以后,我第一反应就是“依赖注入,控制反转”。当然这里我不深入研究。

    我们看下面的

    这里相当于循环执行了容器里面的所有方法,不然对不起这个RunEvent的名字啊。

    到此为止,新增用户的操作就完成了,不过我还是感到一头雾水啊。。。。。。也许是我太笨了吧。

  • 相关阅读:
    喜欢这效果
    jQuery.Validate 使用例子
    网站安全要略谨记
    asp.net发送邮件
    URL参数的加号等特殊字符的处理
    sqlhelper
    Python单元测试框架
    基于Selenium2与Python自动化测试环境搭建
    Robot Framework和Selenium 2 Grid集成指南
    APP性能测试(CPU)
  • 原文地址:https://www.cnblogs.com/kmsfan/p/Kooboo_CMS_Register_New_User.html
Copyright © 2011-2022 走看看