首页 > 编程语言 >Asp.net MVC 3实例学习之ExtShop(六)——登录对话框

Asp.net MVC 3实例学习之ExtShop(六)——登录对话框

时间:2023-05-21 15:01:54浏览次数:34  
标签:Asp 登录 对话框 ExtShop Html div Logon id


      登录对话框将使用jquery提供的对话框,所以不需要添加其它js文件。首先要为登录对话框添加一个表单模型。在Models目录下创建一个“AccountModels”类文件,然后添加一个Logon类,代码如下:



        public   class   LogOnModel


        {


                [ Required ( ErrorMessage = " 请输入“用户名” " ) ]


                [ Display ( Name   =   " 用户名: " ) ]


                public   string   UserName   {   get ;   set ;   }


 


                [ Required ( ErrorMessage = " 请输入“密码” " ) ]


                [ DataType ( DataType . Password ) ]


                [ Display ( Name   =   " 密码 " ) ]

10 

                public   string   Password   {   get ;   set ;   }

11 

 

12 

                [ Required ( ErrorMessage = " 请输入“验证码” " ) ]

13 

                [ StringLength ( 6 , ErrorMessage = " 请输入正确的验证码 " , MinimumLength = 6 ) ]                

14 

                [ Display ( Name   =   " 验证码 " ) ]

15 

                public   string   VaildCode   {   get ;   set ;   }

16 

 

17 

                [ Display ( Name   =   " 记住我? " ) ]

18 

                public   bool   RememberMe   {   get ;   set ;   }

19 

        }

20 

 


 

      表单中将包括用户名、密码、验证码和“记住我”4个输入项。

      现在要创建一个显示表单的操作和分部视图。在“Controllers”目录下创建“AccountController”控制器,然后创建一个“Logon”操作,代码如下:



                [ ChildActionOnly ]


                public   ActionResult   Logon ( )


                {


                        return   PartialView ( ) ;


                }


 


 

      代码很简单,直接返回分部视图就行了。接着创建对应的分部视图,代码如下:



@ model   Extshop . Models . LogOnModel


 


@ using   ( Ajax . BeginForm ( " Logon " ,   " Account " ,   new   AjaxOptions   {   OnSuccess   =   " LogonSuccess " ,   LoadingElementId   =   " LogonLoad " ,   UpdateTargetId   =   " LogonMsg "  


        , OnBegin = " LogonBegin " } ,   new   {   id   =   " LogonForm "   } ) )


{      


        < div >


                < fieldset >


                        < legend > < / legend >


                              < p >

10 

                                @ Html . LabelFor ( m   = >   m . UserName )

11 

                                @ Html . TextBoxFor ( m   = >   m . UserName )

12 

                              < / p >

13 

                              < div   class = " error " >

14 

                                        @ Html . ValidationMessageFor ( m   = >   m . UserName )

15 

                              < / div >

16 

                              < p >

17 

                                @ Html . LabelFor ( m   = >   m . Password )

18 

                                @ Html . PasswordFor ( m   = >   m . Password )

19 

                              < / p >

20 

                                < div   class = " error " >

21 

                                        @ Html . ValidationMessageFor ( m   = >   m . Password )

22 

                                < / div >

23 

                              < p >

24 

                                @ Html . LabelFor ( m   = >   m . VaildCode )

25 

                                @ Html . TextBoxFor ( m   = >   m . VaildCode )                                

26 

                              < / p >

27 

                              < p   style = " padding-left:80px;width:240px;line-height:54px; " > < img   alt = " 验证码 "   id = " Logon-vcode "   height = " 40 "   width = " 100 "   src = " @Url.Action( " Vcode " ,   " Account " ,   new   {   id   =   " Logon "   }) "   style = " cursor:pointer; "   / > & nbsp ; & nbsp ; 区分大小写 < / p >

28 

                                < div   class = " error " >

29 

                                        @ Html . ValidationMessageFor ( m   = >   m . VaildCode )

30 

                                < / div >

31 

                              < p >

32 

                                @ Html . CheckBoxFor ( m   = >   m . RememberMe )

33 

                                @ Html . LabelFor ( m   = >   m . RememberMe )

34 

                                < / p >

35 

                        < p   style = " text-align:center; " >

36 

                                < input   id = " LogonSubmit "   type = " submit "   value = " 登录 "   / >

37 

                        < / p >

38 

                        < p   style = " text-align:center;display:none; "   id = " LogonLoad " > < img   src = " /Images/blue-loading.gif "   alt = " 正在验证…… "   / > < / p >

39 

                        < p   style = " text-align:center;color:Red; "   id = " LogonMsg " > < / p >

40 

                < / fieldset >

41 

        < / div >

42 

}

43 

 

44 

< script   type = " text/javascript " >

45 

        function   LogonSuccess ( e )   {

46 

                $ ( " #LogonForm   input " ) . removeAttr ( " readonly " ) ;

47 

                $ ( " #LogonSubmit " ) . removeAttr ( " disabled " ) ;

48 

                if   ( e . Success )   {

49 

                        $ ( " #LogonMsg " ) . html ( e . Message ) ;

50 

                        $ ( " #login " ) . text ( " 退出 " ) ;

51 

                        $ ( " #LoginDialog " ) . dialog ( " close " ) ;

52 

                }   else   {

53 

                        $ ( " #LogonMsg " ) . html ( e . Message ) ;

54 

                }

55 

        }

56 

 

57 

        function   LogonBegin ( e )   {

58 

                $ ( " #LogonForm   input " ) . attr ( " readonly " ,   true ) ;

59 

                $ ( " #LogonSubmit " ) . attr ( " disabled " ,   " disabled " ) ;

60 

                $ ( " #LogonMsg " ) . html ( " " ) ;

61 

        }

62 

 

63 

< / script >


 

      因为使用Ajac提交,所以这里也是使用Ajax.BeginForm。这里要注意的是代码第27行要通过Vcode操作输出验证码。在Account控制器里的Vcdoe代码如下:



                public   ActionResult   Vcode ( string   id , string   d )


                {


                        VerifyCode   v   =   new   VerifyCode ( ) ;


                        string   code   =   v . CreateVerifyCode ( ) ;                                 // 取随机码


                        Session [ id ]   =   code ;


                        v . Padding   =   10 ;


                        byte [ ]   bytes   =   v . CreateImage ( code ) ;


                        return   File ( bytes ,   @ " image/jpeg " ) ;


                }

10 

 


 

      代码中为了避免同一页面有多个表单使用验证码,从而出现混乱,因而需要传入一个id值用以区分。因为直接返回图片,所以直接返回File值,而不是视图。 

      因为所有页面都会使用到对话框,所以对话框必须加载在母版页,切换到_Layout.cshtml文件,在“”标记上加入以下代码:



< div   id = " LoginDialog "   title = " 登录 " >


        @ { Html . RenderAction ( " Logon " , " Account " ) ; }


< / div >


 


 

      这样,登录对话框就已经实现了。接着修改一下顶部导航栏的登录导航菜单,修改代码如下:



< a   href = " # "   id = " login " > @ ( User . Identity . IsAuthenticated   ?   " 退出 "   :   " 登录 " ) < / a > & nbsp ; & nbsp ; | & nbsp ; & nbsp ;


 

      如果用户已经登录就显示“退出”,如果未登录则显示“登录”。

      在Jquery函数中加入以下脚本



                $ ( " #LoginDialog " ) . dialog ( {   modal :   true ,   autoOpen :   false ,   width :   420 ,   height :   500   } ) ;


                $ ( " #login " ) . click ( function   ( )   {


                        if   ( $ ( " #login " ) . text ( )   = =   " 登录 " )   {


                                $ ( " #LoginDialog " ) . dialog ( " open " ) ;


                        }   else   {


                                $ . ajax ( {


                                        url :   " /Account/LogOut " ,


                                        success :   function   ( )   {


                                                $ ( " #login " ) . text ( " 登录 " ) ;

10 

                                        }

11 

                                } ) ;

12 

                        }

13 

                } ) ;

14 

                $ ( " #Logon-vcode " ) . click ( function   ( )   {

15 

                        var   dt   =   new   Date ( )

16 

                        $ ( " #Logon-vcode " ) . attr ( " src " ,   " /Account/Vcode/Logon?d= "   +   dt . toString ( ) ) ;

17 

                } ) ;

18 

 


 

      代码第1句通过HTML元素创建一个登录对话框。当单击登录菜单,将执行第3行到第12行的带。代码首先判断登录菜单的显示内容,如果是退出,则通过Ajax执行“Logout”操作,如果是登录,则显示登录对话框。代码第14行到第17行的作用是更新登录对话框的验证码图片。

 

总结:

      本系列文章到此就结束了,通过本系列文章,作者自己对Asp.net MVC 3的整个开发流程已经有了基本的了解。总体来说是获益良多,希望你们也是如此。总体感觉,Asp.net MVC 3加入Razor引擎后,代码更加简洁了,开放效率也相应的提高了。

标签:Asp,登录,对话框,ExtShop,Html,div,Logon,id
From: https://blog.51cto.com/dqhuang/6319496

相关文章

  • ASP.NET Core之由配置系统与创建app所想到的
    先看文件配置的代码:ConfigurationBuilderconfigBuilder=newConfigurationBuiler();//典型的创建者模式configBuilder.AddJsonFile("config.json",option:false,reloadChange:false);//添加json配置文件,属于是创建者模式环节中的“配置创建者条件”的环节IconfigurationRootc......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)
    应用程序的基本框架已经搭建好了,现在要做的是完成一个个的功能模块。先从简单做起,完成用户管理模块,该模块主要功能是使用一个Grid显示用户信息,并使用RowEditing进行用户的编辑、添加操作。Grid的分页则在Grid顶部使用分页工具条实现,在工具条上还要添加3个按钮用来添加用户、删除用......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(4)
    现在来完成删除功能。目前的Grid,一次只能选择一行,也就是说,一次只能删除一行,不太方便,因而要设置成使用复选框选择,并允许多选的。在用户视图脚本文件中,添加以下配置项实现这个:"checkboxmodel",false,mode:"MULTI" 打开页面浏览,会看到如图29所示的效果,已经可以在最左边通过复选框进......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
    昨天还有一个错误,CheckColumn的样式和图片没复制过来,造成最后一列的Checkbox显示不正确。在ExtJS包的examples\ux\css目录下打开CheckHeader.css文件,将文件里的全部样式定义复制到app.css中。然后修改将带背景图片的路径修改为“../images”。最后将image目录下的check.gif和unche......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
    现在,创建视图,在Scripts\app\view目录下先创建目录Users,然后在该目录下创建View.js。要使用Grid显示用户信息,因而要从Grid面板派生出视图。定义的时候要注意视图的类名。还有就是一定要定义别名,因为在控制器中是使用widget方法创建的视图实例。如果不想定义别名,那就要修改创建实例的......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
         现在可以对登录窗口进行调试了。     打开系统的首页页面文件,Views\Home目录下的Index.cshtml文件。要动态加载登录窗口,需要先设置好加载路径,因而在onReady函数上加入以下代码:Ext.Loader.setConfig({true,paths:{'Ext.ux':'scripts/extjs/ux'......
  • 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
    忙活了那么久,终于进入正题,ExtJSMVC开发。开始前,先说说4.1.1的一点点变化。在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的。而在4.1.1,则可直接调用application方法开始执行应用程序,简化了。调用application方法,其参数是一个配置......
  • org.apache.jasper.JasperException: /pages/role-list.jsp (行.: [145], 列: [8]) 根
    org.apache.jasper.JasperException:/pages/role-list.jsp(行.:[145],列:[8])根据标记文件中的TLD或attribute指令,attribute[items]不接受任何表达式 web.xml中版本号不兼容产生的问题;解决方法:<%@taglibprefix=“c”uri=“http://java.sun.com/jstl/core”%>改为<%@t......
  • 【源码解读】asp.net core源码启动流程精细解读
    引言core出来至今,已经7年了,我接触也已经4年了,从开始的2.1,2.2,3.1,5,6再到如今的7,一直都有再用,虽然我是一个Winform仔,但是源码一直从3.1到7都有再看,然后在QQ上面也一直比较活跃,之前好几年前一直说给大家解读asp.netcore源码,在之前的博客中,讲的都是比较粗略化的,因为东西太多......
  • ASP.NET Core 异常处理
    此文只是从中摘录整理下自己感兴趣的部分,以便备忘和方便查找回顾,详见:Artech-博客园(cnblogs.com)《ASP.NETCore6框架揭秘》由于ASP.NETCore是一个同时处理多个请求的web应用框架,所以在处理某个请求过程中抛出的异常并不会导致整个应用的终止。NuGet包Microsof......