Silverlight实现查询建模(五) 用户登录
2012-10-24 10:04
295 查看
在群里经常有人问基于SL的用户登录怎么实现,下面我以XCenter的用户登录为例。本篇文章主要针对初级选手。
![](http://www.cnblogs.com/Emoticons/others/woyun2.gif)
先看看登录界面。这里要再一次感谢EasySL的作者,他不只给我们提供了一个类似EXT的美观的界面,而且给我们了一个很有参考价值的UI框架。
![](http://images.cnblogs.com/cnblogs_com/amar-yao/1.JPG)
帐套和公司这里就不说了,都是WCF后台取数据绑定DropDownList。SL是纯客户端技术因此没有类似Asp.Net的Session的东西。但我们可以通过在App.cs里建一个Dictionary类型的实例变量来模拟Session的结构。只要App实例存在,那么这个变量就一直存在。
定义如下:
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
Code
这里特意将这个变量起名为Session。来以假乱真
点击"登录"按钮后执行的动作如下:
代码都很简单,抛去自己特有的逻辑看40-50行,40-47行主要逻辑就是将帐套和单位信息记录到我自己的数据结构中,ServiceContext主要就是和WCF通讯的客户端环境信息,ClientEnvironment其实就是这些信息的客户端快照,这是一个单例类,统一把客户端信息放这里便于使用。48-49行是实际的用户登录的WCF服务调用。回调函数如下:
7-8行就是当登录成功后记录用户信息到Session中。下面就是带动画场景跳转,这在以后文章中在描述。添加Session的Helper方法很简单就是判断Session键是否存在,不存在添加,存在则替换其值。
核心概念就是模拟Asp.Net中的Session结构
![](http://www.cnblogs.com/Emoticons/others/woyun2.gif)
先看看登录界面。这里要再一次感谢EasySL的作者,他不只给我们提供了一个类似EXT的美观的界面,而且给我们了一个很有参考价值的UI框架。
帐套和公司这里就不说了,都是WCF后台取数据绑定DropDownList。SL是纯客户端技术因此没有类似Asp.Net的Session的东西。但我们可以通过在App.cs里建一个Dictionary类型的实例变量来模拟Session的结构。只要App实例存在,那么这个变量就一直存在。
定义如下:
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
Code
#region Prop private Dictionary<string, object> session = new Dictionary<string, object>(); private Dictionary<string, Type> tempClassDic = new Dictionary<string, Type>(); /// <summary> /// Session /// </summary> /// public Dictionary<string, object> Session { get { return session; } set { session = value; } } /// <summary> /// 数据产生的临时类列表 /// </summary> public Dictionary<string, Type> TempClassDic { get { return tempClassDic; } set { tempClassDic = value; } } #endregion
这里特意将这个变量起名为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 }
代码都很简单,抛去自己特有的逻辑看40-50行,40-47行主要逻辑就是将帐套和单位信息记录到我自己的数据结构中,ServiceContext主要就是和WCF通讯的客户端环境信息,ClientEnvironment其实就是这些信息的客户端快照,这是一个单例类,统一把客户端信息放这里便于使用。48-49行是实际的用户登录的WCF服务调用。回调函数如下:
Code 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 }
7-8行就是当登录成功后记录用户信息到Session中。下面就是带动画场景跳转,这在以后文章中在描述。添加Session的Helper方法很简单就是判断Session键是否存在,不存在添加,存在则替换其值。
/// <summary> /// 添加Session信息,不存在就添加,存在则替换 /// </summary> /// <param name="sessionKey"></param> /// <param name="value"></param> public static void Add2Session(string sessionKey, object value) { if (!Session.ContainsKey(sessionKey)) Session.Add(sessionKey, value); else Session[sessionKey] = value; }
核心概念就是模拟Asp.Net中的Session结构
相关文章推荐
- Silverlight实现查询建模(五) 用户登录
- Silverlight实现查询建模(七) 工具栏的实现与加载
- [置顶] Java+Eclipse+Maven+struts2从MySQL数据库中查询用户密码实现简单的登录验证
- Silverlight实现查询建模(六) 带动画场景跳转
- Silverlight实现查询建模(十) 与Silverlight流程设计器集成
- Silverlight实现查询建模(十) 与Silverlight流程设计器集成
- Silverlight实现查询建模(八) 传递DataTable解决方案
- 使用PreparedStatement实现查询操作系列一-----用户登录操作
- node.js---study2 连接池连接数据库实现登录注册查询用户的功能---
- Silverlight实现查询建模(三) XAP包的动态下载
- mybatis学习笔记二mybatis结合spring mvc实现(用户登录,数据查询)
- 笔记 Java web实现用户登录、数据库数据查询、数据删除等功能
- Silverlight实现查询建模(编外) 源代码及运行方法
- Silverlight实现查询建模 系列索引
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- Silverlight学习笔记一(理解一下机制,使用一下布局,实现一个简单的用户登录)
- webService实现单点登录用户关系统一查询
- Silverlight实现查询建模(四) 更新XAP包
- 急!查询所有用户两次登录的时间间隔小于5分钟的所有记录,能用自连接实现吗?
- Silverlight实现查询建模(一) 总揽