Silverlight实现用户登录

Title现在微软的Silverlight很不错,整理下不错的Silverlight实例教程给大家看下,本系列的教程来自cnblogs的博客,本站做有转载说明,尊重作者的知识版权。

  在群里经常有人问基于SL的用户登录怎么实现,下面我以XCenter的用户登录为例。本篇文章主要针对初级选手。

  先看看登录界面。这里要再一次感谢EasySL的作者,他不只给我们提供了一个类似EXT的美观的界面,而且给我们了一个很有参考价值的UI框架。

 帐套和公司这里就不说了,都是WCF后台取数据绑定DropDownList。SL是纯客户端技术因此没有类似Asp.Net的Session的东西。但我们可以通过在App.cs里建一个Dictionary类型的实例变量来模拟Session的结构。只要App实例存在,那么这个变量就一直存在。

  定义如下:

 

 1  #region  Prop
 2 
 3           private  Dictionary < string object >  session  =
 4               new  Dictionary < string object > ();
 5           private  Dictionary < string , Type >  tempClassDic  =
 6               new  Dictionary < string , Type > ();
 7 
 8           ///   <summary>
 9           ///  Session
10           ///   </summary>
11           ///  
12           public  Dictionary < string object >  Session
13          {
14               get  {  return  session; }
15               set  { session  =  value; }
16          }
17 
18           ///   <summary>
19           ///  数据产生的临时类列表
20           ///   </summary>
21           public  Dictionary < string , Type >  TempClassDic
22          {
23               get  {  return  tempClassDic; }
24               set  { tempClassDic  =  value; }
25          }
26 
27           #endregion
28 
29 

 

 

这里特意将这个变量起名为Session。来以假乱真

点击"登录"按钮后执行的动作如下:

 1  private   void  Submit_Click( object  sender, RoutedEventArgs e)
 2           {
 3               AccountVO account  =  (AccountVO)cbAccount.SelectedItem;
 4               DeptVO dept  =  (DeptVO)cbDept.SelectedItem;
 5                string  userId  =  userName.Text.Trim();
 6                string  pwd  =  password.Password.Trim();
 7                if  (String.IsNullOrEmpty(userId)  ||  String.IsNullOrEmpty(pwd))
 8               {
 9                   WindowHelper.TimeAlert( " 用户名或密码不能为空! " );
10                    return ;
11               }
12                try
13               {
14                   WindowHelper.ShowLoading( " 正在验证用户信息. " );
15                    if  (account.Code.Equals( " 0000 " ))
16                   {
17                        // 系统管理帐套
18                        if  (account.Admin  ==   null )
19                       {
20                           WindowHelper.TimeAlert( " 系统管理帐套未指定管理员 " ); // TODO:多语处理
21                            return ;
22                       }
23                        if  (account.Admin.AdminCode.Equals(userId)
24                            &&  account.Admin.Password.Equals(pwd))
25                       {
26                            // 记录Session信息
27                           UserVO user  =   new  UserVO()
28                           {
29                               Code  =  account.Admin.AdminCode,
30                               Name  =  account.Admin.AdminName
31                           };
32                           WindowHelper.Add2Session(SessionConst.SK_User, user);
33                            // 带场景跳转
34                           WindowHelper.Navigate( new  FadeTransition(),  new  Page());
35                       }
36                   }
37                    else
38                   {
39                        // 模拟上下文环境
40                       ServiceContext context  =   new  ServiceContext();
41                       context.Account  =  account;
42                        // 记录帐套信息
43                       ClientEnvironment.Instance.Account  =  account;
44                       WindowHelper.Add2Session(SessionConst.SK_Account, context.Account);
45                        // 记录单位信息
46                       ClientEnvironment.Instance.Dept  =  dept;
47                       WindowHelper.Add2Session(SessionConst.SK_Dept, context.Dept);
48                       UserSrv.UserServiceClient service  =   new  XCenter.UI.UserSrv.UserServiceClient();
49                       service.UserLoginCompleted  +=   new  EventHandler < XCenter.UI.UserSrv.UserLoginCompletedEventArgs > (service_UserLoginCompleted);
50                       service.UserLoginAsync(userId, dept.Id, pwd, context);
51                   }
52               }
53                catch  (Exception ex)
54               {
55                    string  msg  =  ex.Message;
56               } 
57   
58           }
59 

 

 

代码都很简单,抛去自己特有的逻辑看40-50行,40-47行主要逻辑就是将帐套和单位信息记录到我自己的数据结构中,ServiceContext主要就是和WCF通讯的客户端环境信息,ClientEnvironment其实就是这些信息的客户端快照,这是一个单例类,统一把客户端信息放这里便于使用。48-49行是实际的用户登录的WCF服务调用。回调函数如下:

 1     void  service_UserLoginCompleted( object  sender, XCenter.UI.UserSrv.UserLoginCompletedEventArgs e)
 2           {
 3               XCenter.Framework.Public.Core.ReturnVO < UserVO >  result  =  e.Result;
 4                if  (result.IsSucc)
 5               {
 6                    // 记录Session信息
 7                   ClientEnvironment.Instance.User  =  result.ReturnValue;
 8                   WindowHelper.Add2Session(SessionConst.SK_User, result.ReturnValue);
 9                    // 带场景跳转
10                   WindowHelper.Navigate( new  FadeTransition(),  new  Page());
11               }
12                else
13               {
14                    // 调用成功时场景已经切换,再不用隐藏什么
15                   WindowHelper.HideLoading();
16                   WindowHelper.Confirm(result.ErrorMessage,  new  OnConfirm(Login_Confirm));
17               }
18           }
19 

 

 7-8行就是当登录成功后记录用户信息到Session中。下面就是带动画场景跳转,这在以后文章中在描述。添加Session的Helper方法很简单就是判断Session键是否存在,不存在添加,存在则替换其值。

 1  ///   <summary>
 2           ///  添加Session信息,不存在就添加,存在则替换
 3           ///   </summary>
 4           ///   <param name="sessionKey"></param>
 5           ///   <param name="value"></param>
 6           public   static   void  Add2Session( string  sessionKey,  object  value)
 7          {
 8               if  ( ! Session.ContainsKey(sessionKey))
 9                  Session.Add(sessionKey, value);
10               else
11                  Session[sessionKey]  =  value;
12          }

 

好了用户登录就这么简单。核心概念就是模拟Asp.Net中的Session结构。

 

版權

文章來源:自學IT網 http://www.xueit.com/asp.net/show-4501-2.aspx

转载于:https://www.cnblogs.com/CuiQG/archive/2010/03/18/1688760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值